在ssh上执行脚本时,在bash中设置env变量

时间:2015-07-09 23:17:19

标签: linux bash shell ssh env

我有一个简单的bash脚本,其中包含一个名为servers的关联数组。服务器名称是密钥,IP地址是值。当我想在我的所有服务器上运行一些脚本时,我使用它。

for server in ${!servers[@]}; do
  echo ""
  echo -e "\e[93mConnecting to $server...\e[0m"
  ssh $user@${servers[$server]} 'sudo /bin/bash -s' < $1 | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done

当我以交互方式运行它并从stdout读取时,这很好用但是现在我想从cron自动运行它并让服务器上运行的脚本有条件地使用curl将数据发送到hipchat。

不幸的是,许多服务器没有设置有意义的主机名,我不能轻易更改主机名,因为有些数十年的php网站使用主机名来确定它们运行的​​环境并设置数据库凭据等。 ..我不想为此审核几十个甚至百个以上的网站。

我可以将$ server的值发送到服务器上的生成的bash shell,作为脚本在向hipchat或email发送消息时可以使用的环境变量吗?我尝试在/ bin / bash之前做SERVER = $ server,但这似乎不起作用。

1 个答案:

答案 0 :(得分:0)

我明白了。我只需要从调用bash shell的地方删除单引号。然后添加SERVER = $ server工作。

for server in ${!servers[@]}; do
  echo ""
  echo -e "\e[93mConnecting to $server...\e[0m"
  ssh $user@${servers[$server]} sudo SERVER=$server /bin/bash -s < $1 | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done