一、我的使用场景:
家里有个常开终端设备运行一些任务或用来做临时连接查看和测试的环境,然而想在离开之后再连接就要找办法了,因为家里的播号网络没有固定IP,就连播号得到的IP地址也不是公网上可访问的固定IP地址,相当于经过了层层代理或NAT之后才到了公网出口,并且中间路径不详。因此就需要找个公网某固定IP设备借用个端口用来映射或中转到自己这个无固定IP的终端上的SSH端口上。幸好原生的ssh本来就带有这个隧道反向代理的功能,不需要额外再找其它相关功能的软件。
二、相关命令设置:
从根本上讲,主要就是用ssh的-R参数映射到远程固定IP主机本机的29922端口。
ssh -CNR 29922:localhost:22 remote.fix.ip.address -p22 -lremote_user
这样在有固定IP的主机上访问它自己的29922端口即相当于访问家里的22端口,以上命令写到脚本里面,并且套个简单的死循环使其在连接中断后可自动重连,不需要再次执行
cat sshagent.sh
while true ; do /usr/bin/ssh -CNR 29922:localhost:22 remote.fix.ip.address -p22 -lremote_user ; /bin/sleep 5; done;
然而我已经懒癌晚期,懒到了一次都不想执行的程度,加到了rc.local自动启动了
└──╼ #cat /etc/rc.local | grep ssh
/path/to/sshagent.sh &
三、还可以继续做的事
以上是把无固定IP的ssh入口附着到了有固定IP的主机上,如果有需求可以再贪心一点,再让远程主机的IP上开个端口用-L参数代理一下,就可以公网上面ssh remote.fix.ip.address -pSshProxyPort去抓住这个隐藏在云云众生中的一个平凡小主机的小辫子了。
补充固定IP主机上执行的命令:
ssh -fNTL remote.fix.ip.address:SshProxyPort:localhost:RPort29922 [email protected]
以后命令执行后,连接到固定IP主机的SshProxyPort端口即是连接到无固定IP主机的22端口。