Si lo que desea es comprobar si puede conectarse a un host a través de SSH, simplemente puede comprobar si el puerto 22 está abierto. Hay varias formas de hacerlo.
Usando nmap (sustituya localhost con el host de destino):
$ nmap -p22 localhost
Starting Nmap 5.21 (http://nmap.org) at 2012-08-15 13:18 BST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000044s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
usar esto en un script:
if nmap -p22 localhost -oG - | grep -q 22/open; then
echo "OK"
else
echo "NOK"
fi
También puede utilizar netcat:
$ nc -zv localhost 22
Connection to localhost 22 port [tcp/ssh] succeeded!
Para use esto en un script:
if nc -zv localhost 80 2>&1 | grep -q succeeded; then
echo "OK"
else
echo "NOK"
fi
Esta es una comprobación rápida que es suficiente en la mayoría de las situaciones, sin embargo, no es infalible. No hay garantía de que el servicio que se escucha en el puerto remoto sea realmente un servidor SSH.
podría intentar una conexión ficticia e inspeccionar la cabecera de regresar, por ejemplo:
$ echo "dummy" | nc localhost 22
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
Protocol mismatch.
sin embargo, un enfoque de este tipo no es deseable por varias razones. La única manera garantizada sería establecer una conexión real como lo ha demostrado en su pregunta.
'nmap' sería un buen candidato para este. Enumerará todos los puertos abiertos en un sistema, incluido ssh. – fduff