SSH 不会在 sudo 之后运行命令



我正在尝试在远程服务器上执行多个命令。我遇到的问题是运行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)

附加信息:

  • 这两个命令在sudoers文件中都有NOPASSWD标志,因此不会询问密码。

  • requiretty被注释掉了。

  • SSH版本:OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010

  • SELinux 被禁用

  • ssh -vvv选项不会显示工作服务器和非工作服务器之间的日志有任何显着差异

  • 工作服务器
  • 和非工作服务器之间的sshd_config相同

我在这里假设服务器集之间必须存在一些配置差异,因为它们彼此一致,但我无法弄清楚是什么。

一种可能的解决方法:

ssh -i "/path/to/key/id_rsa" user@server sudo bash << EOF
ls -la "/etc/redhat-release"
cat "/etc/redhat-release"
EOF

检查您的sudo版本 (sudo -V)。

事实证明,一台服务器正在运行Sudo version 1.8.6p3而另一台服务器在Sudo version 1.8.21p2上运行,并且正在运行sudo 1.8.20中修复的错误:

修复了 sudo 如果未连接到 tty 也会消耗 stdin 的问题,即使 sudos 中未启用 log_input。错误 #786。

更新sudo版本解决了此问题。

最新更新