我使用从家到工作的反向 ssh 隧道,因此我可以在工作时间时不时地检查我的家用电脑,而无需打开我的家用路由器来接收传入连接。
两台电脑(家用和工作用)都运行 Linux(但发行版不同)。
我正在家用电脑上循环运行 ssh 命令(我只需要用于 VNC 访问的连接):
while [ true ]
do
date
ssh -T -N -R 15900:localhost:5900 me@work-PC
sleep 5m
done
在工作电脑上,我将 VNC 查看器连接到 localhost:15900。
这是我家用电脑上的 .ssh/config:
host work-PC
ProxyJump employers-Gateway
HostName work-PC
User me
host employers-Gateway
HostName web.company.com
User me
只要 ProxyJump(employers-Gateway)没有重新启动,它就能正常工作。当我重新启动工作电脑时,ssh 连接结束(如预期的那样),5 分钟后会打开一个新连接。但是,当雇主网关重新启动时,连接就会停滞。在这些情况下,我在终端上收到以下消息:
Warning: remote port forwarding failed for listen port 15900
当 ProxyJump 不可用时,我能做些什么来让 ssh 连接也关闭?
编辑:
今天,他们重启了网关。不幸的是,戴大卫的解决方案不起作用。这是我在运行隧道循环的终端中看到的内容:
Timeout, server web.company.com not responding.
client_loop: send disconnect: Broken pipe
ssh: connect to host employers-Gateway port 22: Connection timed out
kex_exchange_identification: Connection closed by remote host
Warning: remote port forwarding failed for listen port 15900
会不会是工作电脑仍然认为它已经打开了旧连接,因此拒绝再次打开隧道(从它的角度来看)?
所以也许我看错了方向。也许是最终目标(工作电脑)不知道隧道塌陷,而不是鼻祖(家用电脑)。
对此有什么想法吗?
答案1
您可以尝试在配置文件中添加以下参数:
host work-PC
ProxyJump employers-Gateway
HostName work-PC
User me
ServerAliveInterval 15
ServerAliveCountMax 2
ServerAliveInterval 15
告诉 ssh 每 15 秒向服务器请求一次响应。
ServerAliveCountMax 2
如果 2 次没有收到服务器的响应,则告诉 ssh 退出。