在脚本中检查 SSH 故障



嗨,检查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

相关内容

  • 没有找到相关文章

最新更新