gpt4 book ai didi

bash - 在我的 bash 循环遍历一些服务器的列表,如果 ssh 连接 bash 脚本退出

转载 作者:行者123 更新时间:2023-11-29 09:35:58 25 4
gpt4 key购买 nike

我有一个快速脚本,可以使用 ssh 在每个服务器上运行一个命令(我相信有很多更好的方法可以做到这一点,但它的目的只是为了快速工作!!)。对于 test1 等,没有服务器所以脚本继续,如果 pubkey 身份验证失败,脚本也会继续。但是,如果脚本连接,则会打印日期,但 ssh 循环会终止...

#!/bin/bash -x

cat <<EOF |
##file servers
test1
test2
server1
server2
EOF
while read line
do
if [ "${line:0:1}" != "#" ]; then

ssh -q -oPasswordAuthentication=no -i id_dsa user1@${line} date

fi
done

echo read line must have exited

输出是这样的;

+ cat
+ read line
+ '[' t '!=' '#' ']'
+ ssh -q -oPasswordAuthentication=no -i id_dsa user1@test1 date
+ read line
+ '[' t '!=' '#' ']'
+ ssh -q -oPasswordAuthentication=no -i id_dsa user1@test2 date
+ read line1
+ '[' s '!=' '#' ']'
+ ssh -q -oPasswordAuthentication=no -i id_dsa user1@server1 date
Fri Jul 9 09:04:16 PDT 2010
+ read line
+ echo read line must have exited
read line must have exited`enter code here`

与 ssh 命令的成功返回有关的事情弄乱了循环或 var 的条件...关于原因的任何建议?

最佳答案

您应该将 -n 标志传递给 ssh,以防止它与标准输入混淆:

ssh -n -q -oPasswordAuthentication=no -i id_dsa user1@${line} date

我用我自己的服务器测试了这个并重现了这个问题,添加 -n 解决了它。正如 ssh 手册页所说:

Redirects stdin from /dev/null (actually, prevents reading from stdin)

在您的示例中,ssh 必须从 stdin 读取,这会打乱您在循环中的读取。

关于bash - 在我的 bash 循环遍历一些服务器的列表,如果 ssh 连接 bash 脚本退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3214512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com