Примечание: этот пост не дубликат сбой перенаправления удаленного порта 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 да
у меня работает даже без =
.
Вам также необходимо установить параметры тайм-аута на ssh-сервере, чтобы он быстрее разрывал соединение.
Например, вы можете добавить в /etc/ssh/sshd_config
:
ClientAliveInterval 60
ClientAliveCountMax 3