theuniverseisflat
theuniverseisflat

Reputation: 881

Checking SSH failure in a script

Hi what is the best way to check to see if SSH fails for whatever reason? Can I use a IF statement ( if it fails then do something) I'm using the ssh command in a loop and passing my hosts names form a flat file.

so I do something like:

for i in `cat /tmp/hosts` ; do ssh $i 'hostname;sudo ethtool eth1'; done

I get sometime this error or I just cannot connect

ssh: host1 Temporary failure in name resolution

I want to skip the hosts that I cannot connect to is SSH fails. What is the best way to do this? Is there a runtime error I can trap to bypass the hosts that I cannot ssh into for whatever reason, perhaps ssh is not allowed or I do not have the right password ?

Thanking you in advance Cheers

Upvotes: 6

Views: 23993

Answers (2)

wbt11a
wbt11a

Reputation: 818

You can check the return value that ssh gives you as originally shown here: How to create a bash script to check the SSH connection?

$ ssh -q user@downhost exit
$ echo $?
255

$ ssh -q user@uphost exit 
$ echo $?
0

EDIT - I cheated and used nc

Something like this:

#!/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

Upvotes: 4

that other guy
that other guy

Reputation: 123490

To check if there was a problem connecting and/or running the remote command:

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

To check if there was a problem connecting, regardless of success of the remote command (unless it happens to return status 255, which is rare):

if ssh host command; [ $? -eq 255 ]
then 
  echo "SSH connection failed"
fi

Applied to your example, this would be:

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

Upvotes: 9

Related Questions