12

I'm writing 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?

21

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.

|improve this answer|||||
  • Note that this option works only with the netcat-openbsd package, otherwise the option is not present: nc: invalid option -- 'z' – valentin_nasta Jan 18 '17 at 7:26
  • without -w option nc will be stuck forever on Ubuntu – Edward Torvalds Jan 21 '19 at 10:09
  • can we have a similar command from windows – Harshal Zope Mar 26 at 19:31
13

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.
|improve this answer|||||
  • Damn! You beat me to it. – bahamat Feb 2 '11 at 20:23
  • 2
    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
  • +1 for the z into. whoever you scan still can get info of who did the scan only without providing the identification string – amrx Sep 11 '16 at 20:37
5

Alternate:

nc -vzw 1 hostname 22
|improve this answer|||||
  • this should be selected answer, without -w option nc will be stuck forever on Ubuntu – Edward Torvalds Jan 21 '19 at 10:10
  • Bool can be used like => nc -zw 2 examplehost.com 22 && { echo "You can call your backup function" ; } || { echo "SSH Unavailable" ; } – Mr. Pundir Feb 23 '19 at 11:38
3

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
|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
  • This is the only answer that doesn't require to install additional packages. – Chen A. Oct 23 '17 at 13:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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