我有这个脚本创建了从机器A到机器B的“反向”SSH连接,这样我就可以从机器访问机器A.保证这种SSH连接的最佳方式是什么?
我怎么做的
这是脚本机器A使用连接到计算机B,它在启动时运行一次:
spawn ssh -fN -oStrictHostKeyChecking=no -i /home/pi/.ssh/id_rsa -R 20007:localhost:22 [email protected]
expect "*passphrase*"
send "the passphrase string\r"
expect eof
然后B机上,我只需要连接到机器A这样的:
ssh [email protected] -p 20007
凭啥我使用这种“逆向工程& se“SSH连接?那么,这是唯一的出路机器B可以看到并连接到机器A,因为A机是以一个NAT后面,它不能被解决,所以连接必须来自机器A.
问题
这工作正常,尽管它都是硬编码,特别是密码部分。然而,它有一个问题......如果机器A的互联网出现恶作剧,SSH连接就会关闭,并且在互联网出现时不会重新打开。
该解决方案尝试
我的第一个解决方案是在运行每隔一小时的SSH脚本一个cronjob,但很快我不得不每天到B机24个同时SSH连接从机A,并在2006年底本周机器B因多余的SSH连接而死亡。
问题
那么,有没有任何其他方法,使机器A“再生”仅在连接时断开连接,并确保旧的连接被杀死,这样我有且只有从机器A到B的一个SSH连接?
谢谢!
如何可靠地保持SSH隧道打开? https://superuser.com/questions/37738/how-to-reliably-keep-an-ssh-tunnel-open –
如果由于某种原因,你仍然想使用你的代码,你可以有一个你的cron调用的脚本检查您使用的特定端口上的活动连接的作业。为此,losf -i:port_number将为您提供使用port_number的进程的PID(如果有的话)。 – Ben
哦,顺便说一下,如果你有权访问NAT配置,你可以使用端口转发:https://en.wikipedia.org/wiki/Port_forwarding – Ben