我今天创建了一个Jenkins工作,它的作用是Jenkins用户应该登录到另一个服务器并运行由&&
分隔的两个命令:
ssh -i /creds/jenkins jenkins@servername.com "sh -c 'sudo su && df'"
登录部分工作正常,然后它运行sudo su命令并成为root,但它从不运行第二个命令(即df
)。
我甚至手动执行此操作,并从Jenkins计算机登录到其他服务器(servername)。然后运行sh -c "sudo su && df"
没有运气。
你能帮忙吗?
提前致谢
答案 0 :(得分:2)
如果您尝试以root身份运行df
命令,则应执行sudo df
。
这是因为使用sudo su && df
,您基本上首先执行sudo su
,然后df
。
另外请确保您的jenkins用户可以在没有密码的情况下使用sudo。
答案 1 :(得分:2)
sudo su
启动第二个shell,并且在&& df
shell成功退出后,包含sudo su
的命令正等待在非root shell中执行。
答案 2 :(得分:1)
这可能是您正在寻找的内容:
sh -c 'sudo su - root -c "df"'
修改:请注意,我通常不会使用或提倡使用sudo su - root -c
类型的结构。但是,我发现在通过sudo/gksudo
调用时程序无法正常工作的罕见情况,但在通过su/gksu
调用时工作正常 - 在这种情况下,给定用户应该< strong>尝试首先使用sudo -i
,如果这不起作用,可能不得不诉诸sudo su - root -c
或类似的,作为处理&#34;的一种解决方法。行为不端&#34;程序。由于OP在他的帖子中使用了一些类似的语法,我认为他的案例可能是一个解决方案,所以我在答案中保留了sudo su - root -c
类型的结构。
答案 3 :(得分:0)
当您执行sudo su && df
时,sudo su
将立即启动子进程而无需等待命令的&& df
部分执行,当您点击Ctrl + D
它退出时子进程并进入父shell,那就是你的&amp;&amp; df会执行。您应该使用此处的字符串执行此操作,它可能不是最佳选项,但它可以工作,并且它不会启动新的子进程
sh -c "sudo su" <<<df
注意:不要围绕&lt;&lt;&lt;带有任何引号的df