SSH不会在sudo之后运行命令

时间:2019-06-05 14:26:24

标签: linux ssh

我正在尝试在远程服务器上执行多个命令。我遇到的问题是,运行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在工作和不工作的服务器之间都是相同的

我在这里假设服务器组之间必须存在一些配置差异,因为它们彼此一致,但是我不知道是什么。

2 个答案:

答案 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版本解决了该问题。