ssh + here document + interactive mode

时间:2013-02-21 05:23:07

标签: bash ssh

我可以在具有交互模式的远程机器上通过ssh运行here文档脚本吗?

代码示例是:

ssh -t xijing@ggzshop.com 'bash -s' <<EOF
sudo ls
......Other big scripts......
EOF

double -t也无法正常工作。

-----------------------------一种可能的解决方案:-------------- -----

经过多次尝试后,我想出了以下答案:

Script=`cat <<'EOF'
sudo ls
.....Big scripts.....
EOF`

ssh -t user@host ${Script}

允许用户输入密码。

3 个答案:

答案 0 :(得分:1)

西京的解决方案对我来说似乎没问题。但是,我做了一些化妆品的改变。首先,为了便于阅读,我使用了“dollar-parentheses”而不是反引号。另一件事我没有提供任何解释:即使命令写在单独的行上,也需要使用分号来分隔脚本片段中的多个命令。我的测试:

Script=$( cat <<'HERE'
hostname;
cat /etc/issue;
sudo id
HERE
)

ssh -t user@host ${Script}

将以正常方式询问Sudo密码,无需省略。

答案 1 :(得分:0)

不,我认为你不能运行这样的交互式脚本。

要实现您的目标,您可以为常用管理任务创建专用用户,这些用户可以使用sudo无需密码运行管理命令。接下来,设置ssh密钥身份验证以作为专用用户登录并执行必要的任务。

答案 2 :(得分:0)

如果周围有引号,则无需使用分号分隔Script中的多个命令。

Script="$( cat <<'HERE'
hostname;
cat /etc/issue;
sudo id
HERE
)"


- ssh -t user@host ${Script}
+ ssh -t user@host "${Script}"

# alternative (not recommended)
# set IFS variable to null string to avoid deletion of newlines \n in unquoted variable expansion
export IFS=''
ssh -t user@host ${Script}