SSH端口映射
1. 远程端口映射
1.1 什么是远程端口映射
将局域网内的某个主机的端口映射到远程主机的某个端口, 使得访问了远程某个主机端口就像直接来访问局域网的某个端口一样
1.2 测试案例
- 考虑主机A局域网, 开了22端口的ssh服务, 不能访问外网
- 考虑主机B局域网, 能访问外网
- 远程主机C, 开启了ssh服务, 具有固定的外网IP
- 想通过远程主机C的20022端口访问局域网主机A的ssh服务
在主机B上执行命令
ssh -R 20022:A的ip地址:22 root@C的ip地址
然后在外网的主机C上指向如下命令,即可登录到A主机
ssh -p 20022 root@127.0.0.1
- 没有主机A,就映射B自己的22端口
则在主机B上执行
ssh -R 20022:127.0.0.1:22 root@C的ip地址
2. 本地端口映射
2.1 什么是本地端口映射
将远程主机的某个端口映射到本主机的某个端口, 使得可以直接通过访问到本主机的某个端口和来访问远程主机的端口
2.2 测试案例
和 1.2 主机情况一模一样
- A在局域网不能访问外网
- B在局域网但能访问外网, 且B能通过ssh登录到C主机上
- C远程主机, 开启了ssh服务(22号端口)
现在在A主机上,想访问自己的20022端口来直接访问C主机的ssh服务
在主机A执行如下命令
ssh -L 20022:C的ip:22 root@B的ip地址
通过B这个桥梁来访问到C的端口
3. 其它重要问题
3.1 关于端口转发常用的参数
- -N参数, 不指定远程命令,只用于转发
- -T参数, 不分配一个伪终端
这样在端口映射时, 就不会给你分配终端了, 所以最终命令类似是这样
ssh -NT -L 20022:remote_ip:remote_port root@ip
3.2 监控保活
- 一般ssh连接, 可能一般使用几个小时可能没问题,但是如果想长久后台使时间久了就会断开
- 为了解决这个问题, 使用autossh就可以了, 用apt或者yum命令可以直接安装
- 参数和ssh基本是一模一样的, 就额外多一个参数 -M 参数, 指定一个端口用来监控这个ssh连接
所最最终的命令像是这样
autossh -M 5678 -NT -L 20022:remote_ip:remote_port root@ip
3.3 断电重启
这个问题倒不是ssh所能解决的问题, 可以使用linux相关的一些服务, 最最常用的systemd来管理