非交互式ssh会话不终止,sshd进程在脚本退出后永远等待

我们使用ssh [email protected] sudo /root/run-chef-client.sh命令远程运行一个简单的部署脚本。 它今天开始挂起,因为即使sudo已经完成, sshd10.170.4.11上永远等待。 我们在debugging模式下启动了sshd ,并获得了两种不同types的日志。 以下是会话不挂起时的正常日志:

 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 

我们的理解是,服务器进程等待来自客户端的一些通信,从来没有得到它。 很难说是客户端还是服务器端问题。 我们试图在strace下运行sshd ,但没有成功,因为sudo上的一个SUID位被忽略了。 那么,我们还应该尝试debugging/防止这种情况呢?

在客户端使用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控制,而不是由客户端控制。