4

我有一台主机在启动时启动反向 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命令可以检查远程主机是否可以绑定该端口,如果没有,请在几秒钟内重试?

4

1 回答 1

3

我相信我遇到了与原始海报相同的问题。我似乎在这个问题的接受答案结束时找到了解决方案:

如果客户端在服务器上的连接终止之前重新连接,您可能会遇到新的 ssh 连接处于活动状态但没有端口转发的情况。为了避免这种情况,您需要ExitOnForwardFailure在客户端使用关键字。

因此,我/etc/ssh/ssh_config在客户端的文件中添加了以下行:

ExitOnForwardFailure yes

根据ssh 手册页,此选项将导致“以 -f [to] 启动的客户端在将自身置于后台之前等待所有远程端口转发成功建立”。

在杀死一个 ssh 隧道后立即尝试启动 ssh 隧道时,这似乎会导致 ssh 失败。因此,该选项允许重复尝试,直到正确地重新建立隧道。

于 2018-01-25T18:44:37.180 回答