如何删除不正确的ssh连接后sshd仍然使用的端口绑定?

注意:这个post不是 SSH远程端口转发失败的副本。 这里的问题不是导致端口转发(暂时)失败的原因,我们知道它是什么。 问题是如何删除损坏的sshd端口绑定。 谢谢。

我有一个运行autossh的dynamicIP的服务器A来维护一个带有静态IP的机器B的反向隧道。 下面的代码工作正常:

autossh -M 0 -q -N -R2222:localhost:22 -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -o ExitOnForwardFailure yes USER@B -p PORT 

但是,当由于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 

直到连接终于被接受而没有转发失败(导致autossh停止respawning ssh,如等待),因为sshd终于不再监听端口2222。

我怎么能(至less手动)告诉sshd(在机器B上)它不应该再听2222端口,所以我可以不用等一个小时就恢复连接(并且不需要重新启动机器B)?

PS:重新启动sshd不能解决问题。

PPS: ExitOnForwardFailure yes适用于我,即使没有=