尝试通过脚本连接到多个服务器

时间:2019-07-11 05:47:08

标签: bash

我正在尝试从文件(servers.txt->大约300个IP地址)连接到多台服务器,有些服务器是RHEL5,有些是RHEL7(所以我必须使用diff命令)。

我可以连接到多台服务器,这没关系,但是我无法继续执行某些条件:例如,如果您不知道一个命令,请使用另一个命令。

#!/bin/bash
for host in $(cat servers.txt); do
ssh -q -o StrictHostKeyChecking=no root@$host

#when I try to continue with "if" -> of course I am logout from servers

1 个答案:

答案 0 :(得分:1)

我同意@rkosegi的观点,即可以通过Ansible ad-hoc命令来实现,但是您必须将服务器列表转换为清单,这是非常简单的任务。

在bash提示下,我想我知道您想要什么。您想通过每个ssh命令尝试多个命令。因此,假设您要检查redhat-release软件包的版本并采取不同的操作:

while read HOST; do
  ssh -q -o StrictHostKeyChecking=no root@$HOST '
    VERSION="`rpm -q --queryformat "%{VERSION}" redhat-release`"
    if [[ $VERSION == 5* ]]; then # RHEL5
      echo this is a rhel5
    elif [[ $VERSION == 7* ]]; then # RHEL7
      echo this is a rhel7
    else
      echo this is neither a rhel5 or rhel7
    fi
  '
done <servers.txt

当然,该脚本可以写在一行上,但是我认为我可以在此处对其进行更好的格式化,以提高可读性。

注意:该帖子被bash标记,上面的命令还使用[[特定于bash的测试,不适用于其他shell。