【问题标题】:Execute Bash script stored in a file over SSH通过 SSH 执行存储在文件中的 Bash 脚本
【发布时间】: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

【问题讨论】:

标签: bash ssh


【解决方案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 密码吗?
      猜你喜欢
      • 2014-08-29
      • 2016-07-22
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2019-10-20
      • 1970-01-01
      相关资源
      最近更新 更多