转发的参数
C:压缩数据
-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-N :不执行脚本或命令,通常与-f连用。
-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。
-L : [本地主机]:本地端口:目标IP:目标端口
-D : 动态端口转发
-R : 远程端口转发 [远程主机]:远程端口:目标IP:目标端口
-T :不分配 TTY 只做代理用
-q :安静模式,不输出 错误/警告 信息
本地端口转发
- 需求:
只有172.16.30.83服务器才能够访问172.16.10.203这台服务器,本地电脑可以连接172.16.30.83服务器。
现在希望本地使用navicat能够连接到172.16.10.203的数据库进行操作。
解决方法:
可以在172.16.30.83服务器上指定一个端口,转发请求到172.16.10.203的数据库,返回结果。
在83服务器上操作:
ssh -fNL 172.16.30.83:44444:127.0.0.1:3306 root@172.16.10.203
#表示不将ssh后面的字符串当做命令执行、不用登陆到远程主机,本地绑定44444端口在172.16.30.83这个IP上并监听,通过172.16.10.203这台服务器的网卡将来自本地44444端口的请求转发到172.16.10.203:3306端口上
通过ps -ef |grep ssh可以看到ssh -fNL 172.16.30.83:44444:127.0.0.1:3306 root@172.16.10.203这个线程,说明这个隧道已经建立了。
使用:
client使用172.16.30.83:44444端口就可以连接203服务器的数据库
示意图如下:
远程端口转发
- 需求:
有三台服务器,172.16.10.203, 10.10.3.101(内网), 192.168.10.45。
101可以连通203和45机器,但是101处在内网中,203和45没法主动连接101,203和45之间不通。
现在希望203和45之间能够直接连接通信。
解决方法:
可以在101这个中转服务器上执行ssh命令,建立一个101服务器与203服务器通信的隧道,并将来自这个隧道的请求转发到45服务器的指定端口。
在10.10.3.101服务器上操作:
ssh -fNR 127.0.0.1:55555:192.168.10.45:22 root@172.16.10.203
#表示不将ssh后面的字符串当做命令执行、不用登陆到远程主机172.16.10.203上,通过ssh命令在172.16.10.203上将55555端口绑定在172.16.10.203服务器的lo地址上(即127.0.0.1:55555),到此就就建立了101服务器与203服务器之间的一个通信隧道。后续就可以在172.16.10.203服务器上使用ssh -p55555 root@127.0.0.1登陆到192.168.10.45服务器上了。也可以提前在101服务器配置与45服务器的免密登陆,这样在203服务器上使用ssh -p55555 root@127.0.0.1命令登陆时就不需要输入密码了。
通过ps -ef |grep ssh可以看到ssh -fNR 127.0.0.1:55555:192.168.10.45:22 root@172.16.10.203这个线程,说明这个隧道已经建立了。
示意图如下:
命令说明:
ssh -fNR 127.0.0.1:55555:192.168.10.45:22 root@172.16.10.203 #在203服务器上执行该命令
仅限于自己的理解,如有错误之处,请指正!