我们使用像 .这样的命令远程运行一个简单的部署脚本ssh [email protected] sudo /root/run-chef-client.sh
。它今天开始挂起,因为在已经完成之后sshd
永远等待。我们从调试模式开始,得到了两种不同类型的日志。下面是session没有挂起时的正常log: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
但没有成功,因为在sudo
这种情况下忽略了 SUID 位。那么,我们还应该尝试调试/防止这种情况吗?
在客户端使用
ssh -t
(强制 PTY 分配)解决了这个问题:sshd
由不再由客户端控制的伪 TTY 控制。