通过 ssh 执行脚本时在 bash 中设置环境变量

set env variable in bash when executing script over ssh

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

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

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

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

我可以将 $server 的值作为环境变量发送到服务器上生成的 bash shell 吗?脚本在向 hipchat 或电子邮件发送消息时可以使用该环境变量?我尝试在 /bin/bash 之前只执行 SERVER=$server 但这似乎没有用。

我明白了。我只需要从对 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 <  | while read line; do echo -e "\e[92m[$server]\e[0m $line"; done
done