我可以在具有交互模式的远程机器上通过ssh运行here文档脚本吗?
代码示例是:
ssh -t xijing@ggzshop.com 'bash -s' <<EOF
sudo ls
......Other big scripts......
EOF
-----------------------------一种可能的解决方案:-------------- -----
经过多次尝试后,我想出了以下答案:
Script=`cat <<'EOF'
sudo ls
.....Big scripts.....
EOF`
ssh -t user@host ${Script}
允许用户输入密码。
答案 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}