参考:
https://www.zsythink.net/archives/2450
https://www.cnblogs.com/f-ck-need-u/p/10482832.html
ssh相关选项
-
“-L选项”:表示使用本地端口转发创建ssh隧道
-
“-R选项”:表示使用远程端口转发创建ssh隧道
-
“-N选项”: 表示创建隧道以后不连接到sshServer端,通常与”-f”选项连用
-
“-f选项”:表示在后台运行ssh隧道,通常与”-N”选项连用
-
“-g选项”:表示ssh隧道对应的转发端口将监听在主机的所有IP中,不使用”-g选项”时,转发端口默认只监听在主机的本地回环地址中,”-g”表示开启网关模式,远程端口转发中,无法开启网关功能
转发模式
创建本地转发模式的ssh隧道
ssh -g -f -N -L forwardingPort:targetIP:targetPort user@sshServerIP
创建远程转发模式的ssh隧道
ssh -f -N -R forwardingPort:targetIP:targetPort user@sshServerIP
本地转发
监听 127.0.0.1:9906
A# ssh -f -N -L 9906:10.1.0.2:3306 root@10.1.0.2
监听 10.1.0.1:9906
A# ssh -f -N -L 10.1.0.1:9906:10.1.0.2:3306 root@10.1.0.2
监听 *:9906
A# ssh -g -f -N -L 9906:10.1.0.2:3306 root@10.1.0.2
远程转发
ServerA(10.1.0.1)是外网主机,ServerB(10.1.0.2)是内网主机
B# ssh -f -N -R 9906:10.1.0.2:3306 root@10.1.0.1
想要通过别的主机访问ServerA的9906端口,也可以使用其他程序去反代ServerA的9906端口
实例
A:212.64.100.82(公网主机)
B:192.168.3.20(内网主机)
C:192.168.3.11(内网主机)
B: ssh -f -N -R 33:192.168.3.11:22 root@212.64.100.82
ssh服务器相关配置
需要在ssh服务端的配置文件中将AllowTcpForwarding的值设置为yes
grep -ni "AllowTcpForwarding" /etc/ssh/sshd_config
99:#AllowTcpForwarding yes
137:# AllowTcpForwarding no
调整ssh服务端的ClientAliveInterval配置和ClientAliveCountMax配置即可
grep -ni "ClientAliveInterval" /etc/ssh/sshd_config
112:#ClientAliveInterval 0
grep -ni "ClientAliveCountMax" /etc/ssh/sshd_config
113:#ClientAliveCountMax 3