the*_*lat 5 ssh bash loops runtime-error
嗨,什么是检查SSH是否因任何原因失败的最佳方法?我可以使用IF语句(如果它失败的话做什么),我在一个循环中使用ssh命令和传递我的主机名形成一个平面文件.
所以我做了类似的事情:
for i in `cat /tmp/hosts` ; do ssh $i 'hostname;sudo ethtool eth1'; done
Run Code Online (Sandbox Code Playgroud)
我得到这个错误或我无法连接
ssh: host1 Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)
我想跳过无法连接的主机是SSH失败.做这个的最好方式是什么?是否存在运行时错误,我可以陷阱绕过无论出于何种原因我无法进入的主机,也许ssh是不允许的,或者我没有正确的密码?
提前谢谢你干杯
要检查连接和/或运行远程命令是否存在问题:
if ! ssh host command
then
echo "SSH connection or remote command failed"
fi
Run Code Online (Sandbox Code Playgroud)
要检查连接是否存在问题,无论远程命令是否成功(除非它碰巧返回状态255,这很少见):
if ssh host command; [ $? -eq 255 ]
then
echo "SSH connection failed"
fi
Run Code Online (Sandbox Code Playgroud)
应用于您的示例,这将是:
for i in `cat /tmp/hosts` ;
do
if ! ssh $i 'hostname;sudo ethtool eth1';
then
echo "Connection or remote command on $i failed";
fi
done
Run Code Online (Sandbox Code Playgroud)
您可以检查 ssh 为您提供的返回值,如下所示: 如何创建 bash 脚本来检查 SSH 连接?
$ ssh -q user@downhost exit
$ echo $?
255
$ ssh -q user@uphost exit
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
编辑-我作弊并使用了 nc
像这样的东西:
#!/bin/bash
ssh_port_is_open() { nc -z ${1:?hostname} 22 > /dev/null; }
for host in `cat /tmp/hosts` ; do
if ssh_port_is_open $host; then
ssh -o "BatchMode=yes" $i 'hostname; sudo ethtool eth1';
else
echo " $i Down"
fi
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13802 次 |
| 最近记录: |