Процесс SSH остается активным, даже если соединение не удается?

При попытке установить туннель ssh я заметил, что даже если соединение не удается, процесс остается живым. Например, если я попытаюсь запустить эту команду, пока hostname не работает:

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname

Иногда я получаю ответ:

Warning: remote port forwarding failed for listen port 3000

Я получаю это сообщение об ошибке только тогда, когда исходный процесс (запущенный на локальном компьютере) умирает но удаленный сервер еще не осознает. Процесс пытается перезапустить, но сервер думает, что у него все еще есть соединение на 3000 и не будет исключать новое соединение, что приводит к предупреждению выше.

Но если я сделаю pgrep -x ssh , я увижу, что процесс все еще жив. Я хотел бы запустить эту команду ssh как часть сценария bash в cronjob, который сначала проверяет, установлен ли туннель, и, если не восстанавливает его, но способ настройки сценария: а) видит, что туннель вниз и пытается создать новый (который тайно терпит неудачу), или б) видит, что неудачный процесс жив и ничего не делает. В результате туннель никогда не восстанавливается, пока существует этот неудачный процесс.

Есть ли способ просто убить процесс в случае сбоя соединения вместо получения предупреждения?

0
18.04.2017, 20:30
2 ответа

Для тех, кто еще может найти ответ, я нашел нужную мне опцию в этом ответе: добавление -o ExitOnForwardFailure=True к команде заставляет ssh завершать работу, если проброс порта не удался, вместо создания зомби-процесса:

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname -o ExitOnForwardFailure=True
3
28.01.2020, 02:33

попробуйте ClientAliveInterval.

man sshd_config

     ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has been received from the client, sshd(8) will send a message through
         the encrypted channel to request a response from the client.  The default is 0, indicating that these messages will not be sent
         to the client.
0
28.01.2020, 02:33

Теги

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