我不确定我现在是否有能力对此进行测试,但想知道是否有人可以建议是否可以做这样的事情:
Run a shell script
Shell Script SSH's into a machine (Connection requires SSH key only)
Stuff is run on that machine
Script run on that machine SSH's into another machine (Connection requires SSH key and password)
Stuff is run in that machine
Exit from that machine
Stuff is run in that machine
Exit from that machine
More stuff happens for a few hours
想必这只是组装所需级别的脚本并让它运行的情况?借用另一个 SoF 问题的例子:
sshScript='
ls -la
sshScript2=`
ls -la
`
ssh -t ${UserName}@server "${sshScript2}"
ls -la
'
ssh -t ${UserName}@server "${sshScript}"
在 sudo 的情况下我只是运行sudo -s -u user bash -c script
什么?
我只是不确定这是否会导致无限循环,并且由于我连接的机器处于生产环境中,我无法承担出于测试目的而破坏它们的风险。
答案1
在这种情况下,我通常使用heredoc将脚本提供给远程shell。但是,当脚本需要来自标准输入的用户输入时不可用。
ssh ${UserName}@server <<EOF1
ls -la
ssh ${UserName}@server <<EOF2
ls -la
EOF2
ls -la
EOF1
答案2
是的。有可能的。但如果你的脚本更长,我建议在更多命令中使用 来执行此操作ControlMaster
,就像 Ansible 所做的那样,否则你会迷失在帖子中可以看到的所有引号、反斜杠和内容中。
scp script1.sh remote:/tmp/
ssh remote "bash /tmp/script.sh"
并且您script.sh
可以包含从远程计算机到另一台计算机的更多相似批次。脚本还可以包含rm /tmp/script.sh
自我清理功能。
答案3
我建议使用“ -q -o "BatchMode=yes"
”选项以及使用公钥认证。
另请考虑单引号您想要在远程服务器上运行的命令,以避免与给定命令的潜在本地解释有关的任何问题。
例如:ssh -q -o "BatchMode=yes" user@server 'ls -al'
这是一种相当常见的技术(嵌套 ssh)。实现这个没有问题。