我正在尝试在远程服务器上执行多个命令。我遇到的问题是,运行sudo
命令后,ssh连接会自动关闭。
主要测试失败:
ssh -i "/path/to/key/id_rsa" user@server << EOF
sudo ls -la "/etc/redhat-release"
cat "/etc/redhat-release"
EOF
仅返回ls
结果
-rw-r--r-- 1 root root 55 Jan 29 2013 /etc/redhat-release
如果我将两个命令放在同一行,即
ssh -i "/path/to/key/id_rsa" user@server << EOF
sudo ls -la "/etc/redhat-release"; cat "/etc/redhat-release"
EOF
我将得到两个命令的结果
-rw-r--r-- 1 root root 55 Jan 29 2013 /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
现在最奇怪的部分:
主测试可以在具有相同配置的其他服务器上运行。有一些服务器可以工作,而有其他服务器则不能工作。
如果我从测试中删除了sudo
,我将从这两个命令中得到结果,因此这不是ssh
的局限性
例如
ssh -i "/path/to/key/id_rsa" user@server << EOF
ls -la "/etc/redhat-release"
cat "/etc/redhat-release"
EOF
-rw-r--r-- 1 root root 55 Jan 29 2013 /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
其他信息:
两个命令在NOPASSWD
文件中都带有sudoers
标志,因此不要求输入密码。
requiretty
已被注释掉。
ssh版本:OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
SELinux已禁用
ssh -vvv
选项在工作服务器和非工作服务器之间的日志中没有显示任何显着差异
sshd_config
在工作和不工作的服务器之间都是相同的
我在这里假设服务器组之间必须存在一些配置差异,因为它们彼此一致,但是我不知道是什么。
答案 0 :(得分:0)
一种可能的解决方法:
ssh -i "/path/to/key/id_rsa" user@server sudo bash << EOF
ls -la "/etc/redhat-release"
cat "/etc/redhat-release"
EOF
答案 1 :(得分:0)
检查您的sudo
版本(sudo -V
)。
结果证明一台服务器正在运行Sudo version 1.8.6p3
,而另一台服务器正在Sudo version 1.8.21p2
上,并且其中一台正在运行的错误已在sudo 1.8.20中修复:
解决了一个问题:即使未在sudoers中启用log_input,如果sudo未连接到tty,sudo也会消耗stdin。 Bug #786。
更新sudo
版本解决了该问题。