![执行 sudo 命令后 SSH 连接自动关闭](https://linux22.com/image/731729/%E6%89%A7%E8%A1%8C%20sudo%20%E5%91%BD%E4%BB%A4%E5%90%8E%20SSH%20%E8%BF%9E%E6%8E%A5%E8%87%AA%E5%8A%A8%E5%85%B3%E9%97%AD.png)
sudo
我有两台服务器运行相同版本的 RedHat 6.4,但当我通过 SSH 在其中一台服务器上运行远程命令时,它的行为有所不同。服务器1,连接将在成功的 sudo
命令,但在服务器3,连接保持打开并可以运行进一步的命令。
请注意,对于这些测试,sudo
用户有NOPASSWD
标志,因此不会询问任何提示。据我所知,这些服务器上的所有配置都是相同的(它们被克隆了)。
我用这个测试过:
ssh -vvv user@server1 << EOF
sudo ls -l /home/
ls -l /home/
pwd
EOF
如果我在 server1 上运行它,我会得到一个单个文件列表。
debug3: Wrote 32 bytes for a total of 1621
total 40
drwxr-xr-x. 5 user user 4096 Apr 26 2013 user
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
在同一台服务器上不使用 sudo 命令运行,我得到了两个文件列表和 pwd 结果
ssh -vvv user@server1 << EOF
ls -l /home/
ls -l /home/
pwd
EOF
结果:
debug3: Wrote 32 bytes for a total of 1605
total 40
drwxr-xr-x. 5 user user 4096 Apr 26 2013 user
total 40
drwxr-xr-x. 5 user user 4096 Apr 26 2013 user
/home/user
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
但是,在 server3 上使用 sudo 命令运行脚本时,我得到了所有 3 条命令的结果,就像之前的测试一样。我比较了两台服务器(1 和 3)的 ssh -vvv 日志的输出,除了连接关闭时调试行的顺序不同(参见 client_input... 行),其他一切似乎都一样。
server1 (有无都一样sudo
)
[command results]
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug2: channel 0: rcvd close
服务器3
[command results]
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd close
我想知道如何修复 server1,以便连接不会自动关闭,以便我的脚本在包含sudo
命令时可以完全执行。
我已经检查过一些选项:
- SE Linux 已禁用
- 该
passwd
文件已正确配置了/bin/bash
shell - errexit 已关闭(无论如何命令都是成功的)
sudoers
两台服务器的配置sshd_config
相同
我看到的服务器之间唯一的区别是,有问题的服务器 1 是较老一代的服务器,它是 ProLiant DL380 G7,而服务器 3 是 G8。我尝试过的其他服务器也是 G8(我只有一个 G7 可以试用)。我不明白硬件如何会导致这种问题。