繁体   English   中英

将Bash脚本SSH到多个服务器并在登录失败时继续

[英]Bash script to SSH to multiple servers and continue if login failed

我有一个使用SSH密钥登录到服务器列表的Bash脚本。

该脚本在名为test_hosts.txt的主机名的纯文本文件上进行迭代。

该脚本可以正常工作,除非其中一个登录由于某种原因而失败。 如果其中一台主机登录失败,则整个脚本将停止,并且列表中的其他主机均不会登录。

如果由于任何原因登录失败,如何调整此脚本以继续运行?

#!/bin/bash

USER="username@domain@"

KPATH="/path/to/key"

while read host; do
    echo $host
    echo ${KPATH}    

    GETSIZE="df -h"
    ssh ${USER}$host ${KPATH} "${GETSIZE}" > Test/Hosts/$host.txt

done <Test/Hosts/test_hosts.txt

更新:脚本停止运行,它不会继续到列表中的下一个主机。

这是一个猜测,但是ssh倾向于从标准输入中读取内容,并尝试将其找到的内容传递给远程计算机。 当您在while read循环中使用ssh while read ,这可能意味着ssh将窃取您打算在循环中read的数据。 如果这是问题所在,那么有一个相当简单的解决方案:通过fd 3(而不是标准输入)传递主机文件:

while read -u3 host; do
    ...
done 3<Test/Hosts/test_hosts.txt

(该3<打开上的标准输入代替FD 3中的文件,并且-u3告诉read从FD 3.阅读)

另一种可能性是将-n选项添加到ssh ,这告诉它不要从stdin中读取。

您可以安装程序clustersshcssh )。 它似乎比自定义脚本更适合您的需求。 只需在其配置文件中插入服务器名称和其他信息即可。 http://manpages.org/cssh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM