嗨,检查SSH是否因任何原因失败的最佳方法是什么?我可以使用 IF 语句吗(如果失败,那就做点什么)我在循环中使用 ssh 命令并将我的主机名传递到一个平面文件中。
所以我做了这样的事情:
for i in `cat /tmp/hosts` ; do ssh $i 'hostname;sudo ethtool eth1'; done
我有时收到此错误,或者我只是无法连接
ssh: host1 Temporary failure in name resolution
我想跳过无法连接的主机,因为 SSH 失败。最好的方法是什么?是否有运行时错误我可以捕获以绕过由于任何原因无法通过 ssh 进入的主机,也许不允许 ssh 或我没有正确的密码?
提前感谢你干杯
要检查连接和/或运行远程命令时是否存在问题,请执行以下操作:
if ! ssh host command
then
echo "SSH connection or remote command failed"
fi
要检查连接时是否存在问题,无论远程命令是否成功(除非它碰巧返回状态 255,这种情况很少见):
if ssh host command; [ $? -eq 255 ]
then
echo "SSH connection failed"
fi
应用于您的示例,这将是:
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
<</div>
div class="one_answers"> 您可以检查 ssh 给你的返回值,如下所示:如何创建 bash 脚本来检查 SSH 连接?
$ ssh -q user@downhost exit
$ echo $?
255
$ ssh -q user@uphost exit
$ echo $?
0
编辑 - 我作弊并使用了 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