hel*_*rld 5 ssh port port-forwarding ssh-tunnel
注意:这篇文章不是SSH 远程端口转发失败的重复。这里的问题不是导致端口转发(暂时)失败的原因,我们知道它是什么。问题是如何删除损坏的 sshd 端口绑定。谢谢。
我有一台具有动态 IP 的服务器 A,运行 autossh,以维护到具有静态 IP 的计算机 B 的反向隧道。下面的代码工作正常:
autossh -M 0 -q -N -R2222:localhost:22 -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -o ExitOnForwardFailure yes USER@B -p PORT
Run Code Online (Sandbox Code Playgroud)
然而,当由于 A 的 IP 更改而导致连接崩溃时,需要“很长”的时间(比如一个小时)才能恢复连接。这是因为来自机器 B 的 sshd 仍然监听端口 2222,从而阻止了 ssh(来自机器 A)在崩溃后绑定端口 2222。
B 的 auth.log 包含数十条:
Accepted publickey for USER from A port SOMEPORT ssh2: ED25519 XXXXXXXX
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 2222
Run Code Online (Sandbox Code Playgroud)
直到连接最终被接受而没有转发失败(导致 autossh 停止重新生成 ssh,如等待的那样),因为 sshd 最终不再侦听端口 2222。
我如何(至少手动)告诉 sshd(在机器 B 上)它不应该再监听端口 2222,这样我就可以恢复连接而无需等待一个小时(并且无需重新启动机器 B)?
PS:重启sshd并不能解决问题。
PPS:ExitOnForwardFailure yes
即使没有=
.
您还需要在ssh 服务器上设置超时选项,以便更快地断开连接。
例如,您可以添加到/etc/ssh/sshd_config
:
ClientAliveInterval 60
ClientAliveCountMax 3
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3667 次 |
最近记录: |