我正在尝试从文件(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
答案 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。