此问题通常是由于autossh和ssh的TCP连接保持时间过长导致的。autossh默认情况下会一直尝试重新连接,但是在某些情况下,ssh会保持连接,但是autossh会认为该连接已经断开,因此会尝试建立新的连接,但由于上一个连接仍然存在,因此会遇到“地址已在使用”的问题。
解决方法是在autossh的命令行中添加“-M 0”选项,这将关闭TCP连接的保持时间和ssh的服务器空闲检测,从而解决这个问题。例如:
autossh -M 0 -N -R 1234:localhost:22 user@your-ssh-server
此外,还可以在ssh服务器的sshd_config文件中添加“ClientAliveInterval”和“ClientAliveCountMax”选项,以防止ssh连接保持时间过长。例如:
ClientAliveInterval 60 ClientAliveCountMax 3
这将每隔60秒向客户端发送一个保活信号,如果客户端没有响应,则会断开连接。这可以避免TCP连接保持时间过长,从而导致该问题。