保证此类SSH连接的最佳方法是什么?

时间:2017-03-10 12:52:10

标签: linux ssh reverse-proxy ssh-keys ssh-tunnel

我有这个脚本创建从机器A到机器B的这种“反向”SSH连接,这样我就可以从机器上访问机器A.

我是怎么做的

这是用于连接到机器B的脚本机器,它在启动时运行一次:

spawn ssh -fN -oStrictHostKeyChecking=no -i /home/pi/.ssh/id_rsa -R 20007:localhost:22 machine_b@123.456.789.012
expect "*passphrase*"
send "the passphrase string\r"
expect eof

然后在机器B上,我只需要像这样连接到机器A:

ssh pi@localhost -p 20007

为什么我要使用这种“反向”SSH连接?嗯,这是机器B可以看到并连接到机器A的唯一方式,因为机器A在NAT后面并且无法寻址,因此连接必须来自机器A.

问题

这很好,尽管事实上它都是硬编码的,特别是密码短语部分。然而它有一个问题......如果机器A的互联网变得便便,SSH连接关闭,并且在互联网出现时不会重新打开。

解决方案尝试

我的第一个解决方案是让cronjob每小时运行一次SSH脚本,但很快我每天都有24台从机器A到机器B的SSH连接,到本周末,机器B因多余的SSH连接而死机。

问题

那么,有没有其他方法可以让机器A仅在断开连接时“重新生成”连接,并确保旧连接被终止,以便我从机器A到B只有一个且只有一个SSH连接?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用netstat检查当前连接,为端口22检查grep,如果已建立,则不执行任何操作。即netstat -an | egrep 22

相关问题