Неинтерактивный сеанс 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, а не клиентом.