保持 SSH 端口转发连接处于活动状态

Alb*_*ert 7 ssh port-forwarding

我正在通过 SSH 进行永久端口转发。基本上是

while true; do
        ssh <somewhere> \
                -R <dst-port>:localhost:<src-port> \
                -N -n -o ExitOnForwardFailure=yes
        sleep 10
done
Run Code Online (Sandbox Code Playgroud)

然而,这不太可靠。有时,端口根本没有转发(我不确定连接是否正确存在,但我可以看到客户端上的进程并且它已经运行了几个小时),有时连接肯定不再存在(因为网络接口已关闭),但需要很长时间(有时长达 30-60 分钟)才能超时。

我怎样才能使它更可靠?我想要暂停一分钟。


我刚刚发现这个非常相关/相似的问题。然而,第一个答案表明ExitOnForwardFailure应该解决它,但我已经有了它,但它没有(我现在可以ssh使用此选项看到正在运行的进程,但端口未转发)。

Kaz*_*Kaz 6

我将这些放入 SSH 客户端config文件中:

ServerAliveInterval = 60
ServerAliveCountMax = 3
Run Code Online (Sandbox Code Playgroud)

ssh或者,这些选项可以通过命令行传递-o

某些客户端可能没有此配置控制,例如移动设备的各种meager客户端。在这种情况下,仍然可以在连接的每个服务器上进行全局配置,这当然需要服务器计算机上的权限。OpenSSHD 实现似乎没有办法让用户自定义服务器参数(不会~/.ssh/sshd_config读取可以从服务器端自定义所选参数的文件)。