SSH-Bash脚本,can';无法连接到多个主机。要使用输入文件吗

SSH-Bash脚本,can';无法连接到多个主机。要使用输入文件吗,bash,for-loop,ssh,Bash,For Loop,Ssh,我正在尝试连接到多个主机,以检查配置文件中的各种内容,如正在使用的ldap和dns服务器。我的最终目标是给它一个主机列表(最好是脚本之外的一个文件),以及我希望它运行的任何$script,并将其转储到一个文件以检查错误。它连接到第一台主机fine,输出到文件fine,但随后停止,并且不会连接到后续主机,即app-03 #!/bin/bash HOSTS="app-01.stage app-03.stage" SCRIPT1="hostname" SCRIPT2="grep ldp-02 /etc

我正在尝试连接到多个主机,以检查配置文件中的各种内容,如正在使用的ldap和dns服务器。我的最终目标是给它一个主机列表(最好是脚本之外的一个文件),以及我希望它运行的任何$script,并将其转储到一个文件以检查错误。它连接到第一台主机fine,输出到文件fine,但随后停止,并且不会连接到后续主机,即app-03

#!/bin/bash
HOSTS="app-01.stage app-03.stage"
SCRIPT1="hostname"
SCRIPT2="grep ldp-02 /etc/ldap.conf"
SCRIPT3="cat /etc/resolv.conf"
FILE="test.txt"
for HOSTNAME in ${HOSTS} ;
    do 
    ssh -o "StrictHostKeyChecking no" -n $HOSTNAME "$SCRIPT1; $SCRIPT2; $SCRIPT3"
        if [ "$?" = 1 ]; then
            echo "FAIL - could not connect"
        else
    exit
    fi 
done >> $FILE

exit
完全按照它听起来的方式执行:它退出脚本,因此在到达第二次迭代之前就完成了脚本。我想你只是想要像这样的东西

for HOSTNAME in ${HOSTS} ;
do 
    ssh -o "StrictHostKeyChecking no" -n $HOSTNAME "$SCRIPT1; $SCRIPT2; $SCRIPT3"
    if [ "$?" = 1 ]; then
        echo "FAIL - could not connect"        
    fi 
done >> $FILE
如果
$?
不是1,则无需执行任何操作,循环将移动到下一个主机

假设您只对非零退出代码感兴趣,而不是1(与2、3或其他一些代码相反),那么您可以将
if
语句编写得更为习惯

if ! ssh -o "StrictHostKeyChecking no" -n "$HOSTNAME" "$SCRIPT1; $SCRIPT2; $SCRIPT3"; then
    echo "FAIL - could not connect
fi