Как удалить привязку порта, которая все еще используется sshd после неправильного отключения от ssh?

Примечание: этот пост не дубликат сбой перенаправления удаленного порта 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 да у меня работает даже без = .

3
задан 25 August 2017 в 02:43
1 ответ

Вам также необходимо установить параметры тайм-аута на ssh-сервере, чтобы он быстрее разрывал соединение.

Например, вы можете добавить в /etc/ssh/sshd_config:

ClientAliveInterval 60
ClientAliveCountMax 3
1
ответ дан 4 November 2020 в 19:36

Теги

Похожие вопросы