关于linux:使用配置文件的ssh命令在远程机器上执行shell脚本

Execute shell script in remote machine using ssh command with config file

我想在远程机器中执行一个shell脚本,我使用下面的命令实现了这一点,

1
ssh user@remote_machine"bash -s" < /usr/test.sh

shell脚本在远程计算机中正确执行。现在,我在脚本中做了一些更改,以从配置文件中获取一些值。脚本包含以下行,

1
2
3
#!bin/bash
source /usr/property.config
echo"testName"

属性.config:

1
2
testName=xxx
testPwd=yyy

现在,如果我在远程计算机中运行shell脚本,我不会得到这样的文件错误,因为/usr/property.config在远程计算机中不可用。

如何将配置文件与要在远程计算机中执行的shell脚本一起传递?


唯一可以引用您创建并仍然运行脚本的config文件的方法是,您需要将配置文件放在所需的路径上,有两种方法可以做到这一点。

  • 如果config几乎总是固定的,而您不需要更改它,那么在需要运行脚本的主机上本地设置config,然后在脚本中放置到config文件的绝对路径,并确保运行脚本的用户有权访问它。

  • 如果每次运行该脚本时都需要发送配置文件,那么在发送和调用该脚本之前,可能只需发送该文件即可。

    1
    2
    scp property.config user@remote_machine:/usr/property.config
    ssh user@remote_machine"bash -s" < /usr/test.sh
  • 编辑

    根据请求,如果您想在一行中强制执行,可以这样做:

    • 属性.CONFIG

      1
      2
      testName=xxx
      testPwd=yyy
    • 试验室

      1
      2
      3
      #!bin/bash
      #do not use this line source /usr/property.config
      echo"$testName"

    现在,您可以按照John的建议运行命令:

    1
    ssh user@remote_machine"bash -s" < <(cat /usr/property.config /usr/test.sh)


    试试这个:

    1
    ssh user@remote_machine"bash -s" < <(cat /usr/property.config /usr/test.sh)

    那么脚本不应该在内部源代码配置。

    第二个选项,如果您只需要传递环境变量:

    这里介绍了一些技术:https://superuser.com/questions/48783/how-can-i-pass-an-environment-variable-through-an-ssh-command

    我最喜欢的可能是最简单的:

    1
    ssh user@remote_machine VAR1=val1 VAR2=val2 bash -s < /usr/test.sh

    当然,这意味着您需要从本地配置文件构建环境变量分配,但希望这很简单。