Linux 保证这种SSH连接的最佳方式是什么?

Linux 保证这种SSH连接的最佳方式是什么?,linux,ssh,reverse-proxy,ssh-keys,ssh-tunnel,Linux,Ssh,Reverse Proxy,Ssh Keys,Ssh Tunnel,我有一个脚本,它创建了从机器A到机器B的“反向”SSH连接,这样我就可以从机器A访问机器A 我是怎么做到的 这是机器A用来连接机器B的脚本,机器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" e

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

我是怎么做到的

这是机器A用来连接机器B的脚本,机器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:

sshpi@localhost-p 20007

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

问题

尽管它都是硬编码的,特别是密码短语部分,但它工作得很好。但是它有一个问题。。。如果机器A的Internet发出噗噗声,SSH连接将关闭,并且在Internet启动时不会重新打开

解决方案尝试

我的第一个解决方案是让cronjob每小时运行一次SSH脚本,但很快我就有了每天24个从机器a到机器B的同步SSH连接,到本周末,机器B因SSH连接过多而死亡

问题

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


谢谢

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

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

如何可靠地保持SSH隧道打开?如果出于某种原因,您仍然希望使用代码,则可以使用cron作业调用的脚本来检查您使用的特定端口上的活动连接。为此,losf-i:port_number将为您提供使用port_number.Oh的进程的PID(如果有的话),顺便说一下,如果您可以访问NAT配置,您可以使用端口转发:如何可靠地保持SSH隧道打开?如果出于某种原因,您仍然希望使用代码,则可以使用cron作业调用的脚本来检查您使用的特定端口上的活动连接。为此,losf-i:port_number将为您提供使用port_number.Oh的进程的PID(如果有),顺便说一句,如果您可以访问NAT配置,您可以使用端口转发: