我使用的是Redhat 7.8系统,并试图从远程Jenkins调度器运行一个类似的命令。ssh userA@host sudo -u userB -- sh -c 'whoami; whoami'
输出是
userB
userA
我希望输出为。
userB
userB
无法修复这个。尝试了sudo选项,如 -i
, -s
和 -- sh -c
sudoer文件有如下配置。
userA ALL=(userB) NOPASSWD: ALL
问题是单引号被删除了,作为 ssh
构造一条命令传递给远程shell,所以你真正运行的是
sudo -u userB -- sh -c whoami; whoami
一般情况下,你总是希望传递一个单一的字符串参数给 ssh
而不是让它将多个参数组合成一条命令。
ssh userA@host "sudo -u userB -- sh -c 'whoami; whoami'"