Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

i'm writting a script that will backup data from my laptop to an ubuntu server. to do so, i'm looking for a (ba)sh command to test if the server is available before starting the backup. something like "ping" on port 22 that returns a boolean

how can i do this ? thanks for helping

share|improve this question
add comment

3 Answers

up vote 4 down vote accepted

Like this:

nc -z hostname 22 > /dev/null
echo $?

If it's 0 then it's available. If it's 1 then it's not.

share|improve this answer
add comment

Use netcat:

nc -z localhost 22

From the manpage

 -z      Specifies that nc should just scan for listening daemons,
         without sending any data to them.
share|improve this answer
    
Damn! You beat me to it. –  bahamat Feb 2 '11 at 20:23
1  
thanks, didn't know nc , i was wondering why nc -z -w 2 192.168.0.123 ( -w is the timeout option, in seconds ) does not timeout :| –  Amo__ Feb 2 '11 at 23:12
    
You need to specify a port too. nc -z -w 2 192.168.0.123 22 works as expected. –  chris Feb 3 '11 at 7:36
add comment

What about

MACHINE=192.168.0.8
exec 3>/dev/tcp/${MACHINE}/22
if [ $? -eq 0 ]
then
    echo "SSH up"
else
    echo "SSH down"
fi
share|improve this answer
    
Don't always assume that it's Linux. His laptop may be a Mac. And Debian disables /dev/tcp. Ubuntu being Debian derived may as well (but I have no specific knowledge). But if /dev/tcp is available, then yes this is perfectly valid. –  bahamat Feb 2 '11 at 20:35
    
thx for your feedback, i've wrote it on a Mac. –  user4418 Feb 2 '11 at 20:49
    
thanks, even if exec 3>/dev/tcp/${HOST}/22 looks really "bizarre" –  Amo__ Feb 2 '11 at 23:17
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.