当隧道被拆除并重新启动时,反向 ssh 隧道无法绑定到端口

问题描述 投票:0回答:2

我有一个主机在启动时启动反向 ssh 隧道,如下所示:

ssh -N -R 2222:localhost:22 [email protected]

效果很好,反向隧道形成。但每当我重新启动主机时,构建隧道的远程服务器都会说:

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
命令可以执行类似检查远程主机是否可以绑定该端口的操作,如果不能,请在几秒钟后重试?

linux ssh autossh
2个回答
5
投票

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

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

ExitOnForwardFailure
关键字。

因此,我将以下行添加到客户端的

/etc/ssh/ssh_config
文件中:

ExitOnForwardFailure yes

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

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


0
投票

当我使用

autossh
设置隧道时,我也遇到了同样的问题,这是
autossh
手册中的建议,它对我来说效果很好:

使用 autossh 时有两个特别有用的 OpenSSH 选项:

退出转发失败=是 在客户端,以确保当 autossh 假定连接设置正确时转发已成功。

服务器端的ClientAliveInterval,以确保如果客户端的连接关闭,则服务器端的侦听套接字也关闭。

© www.soinside.com 2019 - 2024. All rights reserved.