Примечание: этот пост не дубликат Ошибка переадресации удаленного порта SSH. Вопрос здесь не в какие вызывает (временный) сбой переадресации портов, мы знаем, что это такое. Вопрос в том как чтобы удалить сломанную привязку порта sshd. Спасибо.
У меня есть сервер A с динамическим IP-адресом, на котором запущен autossh, для поддержки обратного туннеля к машине B со статическим IP-адресом. Следующий код отлично работает:
autossh -M 0 -q -N -R2222:localhost:22 -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -o ExitOnForwardFailure yes USER@B -p PORT
Однако, когда соединение разрывается из-за изменения IP-адреса A, восстановление соединения занимает «много времени» (скажем, час). Это потому, что sshd с машины B по-прежнему прослушивает порт 2222, что не позволяет ssh (с машины A) привязать порт 2222 после сбоя.
auth.log из B содержит десятки:
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 перестает возрождать ssh, как ожидалось), потому что sshd, наконец, больше не слушает порт 2222.
Как я могу (хотя бы вручную) сообщить sshd (на машине B), что он больше не должен слушать порт 2222, чтобы я мог восстановить соединение, не дожидаясь часа (и без перезапуска машины B)?
PS: перезапуск sshd проблему не решает.
PPS: ExitOnForwardFailure yes
у меня работает даже без =
.