Bash 检查脚本中的SSH故障

Bash 检查脚本中的SSH故障,bash,loops,ssh,runtime-error,Bash,Loops,Ssh,Runtime Error,您好,检查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是否因任何原因失败的最佳方法是什么? 我是否可以使用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不允许或我没有正确的密码

先谢谢你
干杯

您可以检查ssh最初提供给您的返回值,如下所示:

编辑-我作弊并使用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

要检查连接和/或运行远程命令是否存在问题,请执行以下操作:

if ! ssh host command
then
  echo "SSH connection or remote command failed"
fi

要检查连接是否存在问题,无论远程命令是否成功(除非它恰好返回状态255,这是罕见的),请执行以下操作:

应用于您的示例,这将是:

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

Ok Thx wbt11a。。我知道如何陷阱,但在ssh命令的上下文中,我已经发布了如何陷阱?我需要在
cat/tmp/hosts
中对i使用该命令的同一过程中使用它;执行ssh$i'主机名;sudo ethtool eth1';谢谢,我已经完成一半了。但我仍然会收到4个密码主机的提示,我无权访问这些主机。我怎样才能跳过这些主机呢?基本上,是否有办法逃避密码挑战并跳转到下一台主机?请尝试示例中的“-o”BatchMode=yes”标志。如果[!ssh-o$1];然后echo sshfailed else echo挑战我fihi试过了但失败了?你能帮忙吗。。如果[!ssh-o$1];然后echo sshfailed else echo挑战我仍然是fiOk Thx“另一个家伙”。。我知道如何陷阱,但在ssh命令的上下文中,我已经发布了如何陷阱?我需要在
cat/tmp/hosts
中对i使用该命令的同一过程中使用它;执行ssh$i'主机名;sudo ethtool eth1';doneThanks我成功了一半。但我仍然会收到4个密码主机的提示,我无权访问这些主机。我怎样才能跳过这些主机呢?基本上,有没有办法逃避密码挑战并跳转到下一个主机?
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