我有一个快速的脚本,使用ssh在每个服务器上运行命令(我相信有很多更好的方法来做到这一点,但它的目的是为了快速工作!!).对于test1等,没有服务器,所以脚本继续,如果pubkey auth失败,脚本也会继续.但是,如果脚本连接,则打印日期但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
Run Code Online (Sandbox Code Playgroud)
输出是这样的;
+ 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`
Run Code Online (Sandbox Code Playgroud)
与ssh命令的成功返回有关的事情是搞乱循环或var的条件......对于为什么有任何建议?
你应该将-n标志传递给ssh,以防止它与stdin混乱:
ssh -n -q -oPasswordAuthentication=no -i id_dsa user1@${line} date
Run Code Online (Sandbox Code Playgroud)
我用自己的服务器测试了这个并重现了问题,添加-n解决了它.正如ssh手册页所说:
从/ dev/null重定向stdin(实际上,阻止从stdin读取)
在你的例子中,ssh必须从stdin读取,这会扰乱你在循环中的读取.
| 归档时间: |
|
| 查看次数: |
3631 次 |
| 最近记录: |