Назад | Перейти на главную страницу

неинтерактивный сеанс 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 было проигнорировано в этом случае. Итак, что еще мы должны попытаться отладить / предотвратить такие ситуации?

С помощью 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 контролируется псевдо-телетайпом, а не клиентом.