我有一个 Bash 脚本,它使用 SSH 密钥登录到服务器列表。
该脚本遍历名为 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
倾向于从标准输入中读取,并尝试将在那里找到的任何内容传递给远程计算机。当您ssh
在while read
循环中使用时,这可能意味着ssh
将窃取您打算read
在循环中使用的数据。如果这是问题所在,有一个相当简单的解决方案:通过 fd 3 而不是标准输入传递主机文件:
while read -u3 host; do
...
done 3<Test/Hosts/test_hosts.txt
(3<
在 fd 3 而不是 stdin 上打开文件,并-u3
告诉read
从 fd 3 读取。)
另一种可能性是将-n
选项添加到ssh
,它告诉它不要从标准输入读取。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句