我有一个主机在启动时启动反向ssh隧道,如下所示:
ssh -N -R 2222:localhost:22 root@10.1.2.6
效果很好,形成了反向隧道。但每当我重新启动主机时,构建隧道的远程服务器就会这样说:
Sep 28 13:13:59 kali sshd[4547]: error: bind: Address already in use
Sep 28 13:13:59 kali sshd[4547]: error: channel_setup_fwd_listener_tcpip: cannot listen to port: 2222
为了让我解决这个问题,我必须等待几分钟才能使旧的ssh隧道超时,然后找到新的ssh连接并将其终止,然后当我重建ssh隧道时它工作正常。
是否有ssh
命令或autossh
命令执行类似检查,如果远程主机可以绑定该端口,如果没有,请在几秒钟后重试?
答案 0 :(得分:1)
我相信我遇到了与原始海报相同的问题。我似乎在this question的接受答案的最后找到了解决方案:
如果客户端在服务器上的连接终止之前重新连接,则最终可能会出现新的ssh连接处于活动状态但没有端口转发的情况。为避免这种情况,您需要在客户端使用
ExitOnForwardFailure
关键字。
我已将以下行添加到客户端的/etc/ssh/ssh_config
文件中:
ExitOnForwardFailure yes
根据ssh man page,此选项将导致"客户端启动-f [to]等待所有远程端口转发成功建立,然后将其置于后台"。 / p>
这似乎导致ssh在尝试杀死ssh隧道后立即失败。因此,该选项可以重复尝试,直到隧道正确重新建立。