通过 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“端口 22:没有到主机的路由”错误
为什么在bash脚本中执行ssh命令时,docker-compose没有看到我的.env文件?
大坑,jenkins 配置publish over ssh bash 插件,远程部署,无法执行shell脚本