Неинтерактивный сеанс ssh не завершается, процесс sshd ждет вечно после выхода из скрипта

Мы запускаем простой сценарий развертывания удаленно, используя такую ​​команду, как ssh deployer@10.170.4.11 sudo /root/run-chef-client.sh, Это начало зависать сегодня, потому что sshd ждал вечно на 10.170.4.11 даже после sudo уже закончил Мы начали sshd в режиме отладки и получил два разных вида журналов. Ниже приведен нормальный журнал, когда сеанс не зависает:

debug1: Received SIGCHLD.
debug1: session_by_pid: pid 23187
debug1: session_exit_message: session 0 channel 0 pid 23187
debug1: session_exit_message: release channel 0
Received disconnect from 10.170.4.6: 11: disconnected by user

И когда он зависает, мы получаем следующее:

debug1: Received SIGCHLD.
debug1: session_by_pid: pid 24209
debug1: session_exit_message: session 0 channel 0 pid 24209
debug1: session_exit_message: release channel 0

Наше понимание состоит в том, что серверный процесс ожидает некоторой коммуникации со стороны клиента и никогда не получает ее. Трудно сказать, если это на стороне клиента или на стороне сервера. Мы пытались бежать sshd под strace но не удалось, потому что бит SUID на sudo был проигнорирован именно этот случай. Итак, что еще мы должны попытаться отладить / предотвратить эту ситуацию?

1 ответ

Решение

С помощью ssh -t (принудительное распределение PTY) на стороне клиента решило проблему:

debug1: Received SIGCHLD.
debug1: session_by_pid: pid 31701
debug1: session_exit_message: session 0 channel 0 pid 31701
debug1: session_exit_message: release channel 0
debug1: session_pty_cleanup: session 0 release /dev/pts/1
Received disconnect from 127.0.0.1: 11: disconnected by user
debug1: do_cleanup
debug1: PAM: cleanup
debug1: PAM: closing session
debug1: PAM: deleting credentials

sshd контролируется псевдо TTY, а не клиентом.

Другие вопросы по тегам