循环运行 ssh 隧道;不好的想法?端口已被占用?

循环运行 ssh 隧道;不好的想法?端口已被占用?

我建立了一个从我工作地点的服务器(运行 CentOS)到家(Ubuntu)的 ssh 隧道,这样我就可以从家里登录到我的工作隧道,在工作电脑上使用如下命令:

ssh -R 49666:localhost:22 homename@homeIP -N

我做了密钥等。我从工作地点 ssh 到家里,然后远程使用家里的电脑 ssh 回到工作地点进行测试。看起来不错,它起作用了。我可以双向 scp 文件等。

后来我回家后发现隧道不知为何关闭了。我不明白为什么。后来我问了一位同事,他说他也遇到了同样的问题,并且在他的工作电脑上一直运行着这样的脚本:

while true
 ssh -R 49666:localhost:22 homename@homeIP -N
 sleep 15

他基本上让它永久地运行,以便在隧道断裂时自动重新启动。

我也尝试过这个,并进行了测试(使用家用电脑远程从工作地点 ssh 到家中),看起来又没问题了。但是,当我回家时,隧道又不起作用了。我查看了 auth.log,发现这三行在同一时间戳,大约是在我回家的半路上:

Accepted publickey from work IP (I erased the rest for my privacy)
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 49666

似乎它试图将我的隧道绑定到端口 49666,而其他程序正在使用该端口。好吧,我明白为什么会失败。所以我试图找到正在使用端口 49666 的东西,以便可以将其终止。但似乎什么也没找到。我试过 netstat、lsof 等。没有任何东西在使用端口 49666。我认为除了隧道之外,没有任何东西曾经使用过端口 49666。可能是它在隧道已经存在的情况下创建了隧道?或者,如果隧道已经存在,隧道循环脚本会什么都不做吗?

由于没有任何东西使用端口 49666,我希望当我工作计算机上的隧道脚本再次循环时,隧道会自动重新建立,但事实似乎并非如此。

有没有办法解决这个问题而不用亲自返回工作服务器?或者至少,只需进行一次调整即可解决,这样我就不必经常返回服务器了?

服务器永远不会关闭,因此理论上,循环脚本应该仍在运行。但它会在隧道无法建立后自行终止吗?

相关内容