我想在远程服务器上执行 cd 和 scp 命令,这些命令必须使用不同的 sudo 用户登录。下面的代码片段要求我的用户输入密码(屏幕上的回声)但挂在那里。它不执行 cd
#!/bin/bash
server=myserver.com
ssh $server 'sudo -S -u <user> -i; cd dir1/dir2/; scp file1 user@local-sever'
答案 0 :(得分:2)
问题是您在 cd 之前有一个分号,因此 sudo 没有要执行的命令。去除那个 ;它应该可以工作:
ssh $server 'sudo -S -u <user> -i scp dir1/dir2/file1 user@local-sever'
答案 1 :(得分:1)
有几种方法可以解决这个问题,但大多数归结为将命令包装成一组指令。 Raman 的解决方案很好,因为它通过使用完整路径来处理问题,但有时这不是一种选择。这是另一个方面 -
假设你的命令列表可以负担得起引号,我喜欢这里的字符串。
ssh -t sa-nextgen-jenkins.eng.rr.com <<< "
echo 'set -x; cd /tmp; whoami; touch foo; ls -l foo; rm -f foo;'|sudo -iSu user
"
如果您需要引号,请尝试使用此处的文档。
ssh -t sa-nextgen-jenkins.eng.rr.com <<END
echo 'set -x; echo "$RANDOM"; cd /tmp; whoami; touch foo; ls -l foo; rm -f foo;'|sudo -iSu $user
END
您也可以编写一个包含任意复杂命令的小脚本并 scp 过去,然后使用远程 ssh 调用以相关用户身份执行它。