在configuration文件中使用ssh命令在远程机器上执行shell脚本

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

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

shell脚本在远程机器上正确执行。 现在我已经对脚本进行了一些更改,以从configuration文件中获取一些值。 该脚本包含下面的行,

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

property.config:

 testName=xxx testPwd=yyy 

现在,如果我在远程机器上运行shell脚本,我得到没有这样的文件错误,因为/远程机器上将不可用/usr/property.config。

如何传递configuration文件以及在远程机器上执行的shell脚本?

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

  1. 如果config几乎总是固定的,不需要修改,那么在需要运行脚本的主机上在本地config ,然后在脚本中输入config文件的绝对路径,并确保运行该脚本的用户具有访问它的权限。

  2. 如果需要在每次运行该脚本时发送配置文件,则可以在发送和调用脚本之前简单地scp该文件。

     scp property.config user@remote_machine:/usr/property.config ssh user@remote_machine "bash -s" < /usr/test.sh 

编辑

根据要求,如果你想强制在一行中做到这一点,这是如何做到的:

  • property.config

     testName=xxx testPwd=yyy 
  • test.sh

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

现在你可以像约翰所说的那样运行你的命令了:

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

尝试这个:

 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

我最喜欢的一个也许是最简单的:

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

这当然意味着你需要从本地配置文件中建立环境变量赋值,但希望这很简单。