使用bash在远程服务器上执行多个命令

时间:2021-01-21 14:13:06

标签: bash shell

我想在远程服务器上执行 cd 和 scp 命令,这些命令必须使用不同的 sudo 用户登录。下面的代码片段要求我的用户输入密码(屏幕上的回声)但挂在那里。它不执行 cd

#!/bin/bash
server=myserver.com
ssh $server 'sudo -S -u <user> -i; cd dir1/dir2/; scp file1 user@local-sever'

2 个答案:

答案 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 调用以相关用户身份执行它。