通过 SSH 执行存储在文件中的 Bash 脚本

Posted

技术标签:

【中文标题】通过 SSH 执行存储在文件中的 Bash 脚本【英文标题】:Execute Bash script stored in a file over SSH 【发布时间】:2011-08-05 12:59:31 【问题描述】:

假设我在foo.sh 文件中存储了以下 Bash 脚本:

#!/bin/bash
echo foo

无需scp 文件,如何在远程机器上执行存储在foo.sh 中的脚本?

我尝试了以下(有一些变化)但没有成功:

$ ssh root@remote eval `cat foo.sh`

eval `cat foo.sh`似乎在这里扩展为eval #!/bin/bash echo foo

【问题讨论】:

how to use ssh to run shell script on a remote machine? 的可能重复项 您当然希望设置 SSH 使其不需要密码:csua.berkeley.edu/~ranga/notes/ssh_nopass.html 【参考方案1】:

你可以使用runoverssh:

sudo apt install runoverssh
runoverssh -s localscript.sh user host

-s 远程运行本地脚本

【讨论】:

【参考方案2】:

在接受的答案中我看到:

我想把它作为一个班轮。可以做一个小代码示例吗?

应该是这样的:

ssh root@MachineB 'bash -s -- uno' < local_script.sh

或者更好,带有此处的文档

ssh root@MachineB 'bash -s -- uno' <<\EOF
> date
> echo $1
> EOF
jue sep 18 13:01:25 CEST 2014
uno

【讨论】:

【参考方案3】:
cat foo.sh | ssh HOSTNAME 

现在经过测试:小心处理! :) (删除了破折号(见 cmets)和几乎所有内容:))

【讨论】:

你为什么要cat foo.sh -?这将阻塞,等待用户点击ctrl-D 好吧,我没有可测试的环境。没有破折号?我更正了。 你不需要破折号,cat 从标准输入读取不带参数。但是您根本不需要cat,也不需要foo.sh 文件。只需运行sh【参考方案4】:

cat foo.sh | ssh -T root@remote 会成功的。 -T 选项会抑制您可能会收到的警告,因为您正在管道输入来自文件。

【讨论】:

听听 cat 的无用用法。 ssh root@remote 如何将变量传递给foo.sh【参考方案5】:
ssh root@MachineB 'bash -s' < local_script.sh

我是从那个帖子里得到的:How to use SSH to run a shell script on a remote machine?

【讨论】:

我怎样才能将参数传递给该脚本? @Agostino:如果您需要使用一些参数调用 local_script.sh,只需将调用 local_script.sh 的脚本名称传递给必要的参数,而不是直接调用 local_script.sh :)跨度> 我想把它当作一个单衬里。你能做一个小代码示例吗? 很高兴您提供源链接! 我需要在自动化环境中执行这个脚本。知道如何提供 ssh 密码吗?

以上是关于通过 SSH 执行存储在文件中的 Bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

从 bash 脚本中通过 ssh 在远程主机上执行命令

bash 脚本中的 ssh“端口 22:没有到主机的路由”错误

为什么在bash脚本中执行ssh命令时,docker-compose没有看到我的.env文件?

大坑,jenkins 配置publish over ssh bash 插件,远程部署,无法执行shell脚本

如何在bash脚本中执行存储在heredoc中的curl命令?

ssh 登录弹窗提示