ssh并通过heredoc以另一个用户身份执行多个命令

时间:2018-04-24 21:27:06

标签: linux bash ssh

我有一个脚本需要通过ssh执行作为另一种用途,有没有办法像这样传递整个脚本:

ssh -t user@server.com sudo -u user2 sh -c << EOF
 cd /home
 ls
 dir=$(pwd)
 echo "$dir"
 echo "hello"
 ....
EOF

返回: sh:-c:选项需要参数

单独

ssh'ing sudo'ing 不是一个选项,并且无法直接在机器上放置.sh文件。

1 个答案:

答案 0 :(得分:1)

sh -c需要命令字符串作为参数。由于您正在从标准输入(通过heredoc)读取命令,因此您需要使用sh -s选项:

ssh -t user@server.com sudo -u user2 sh -s << 'EOF'
 cd /home
 ls
 dir=$(pwd)
 echo "$dir"
 echo "hello"
 ...
EOF

来自man sh

  

-c

     

string如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。

     

-s

     

如果存在-s选项,或者在选项处理后没有参数,则从标准输入读取命令。此选项允许在调用交互式shell时设置位置参数。

需要引用heredoc标记以防止父shell解释内容。