2012-08-15 19 views
12
ssh -q -o "BatchMode=yes" [email protected] "echo 2>&1" && echo "OK" || echo "NOK" 

este método es adecuado pero vuelve true cuando el pub.key se copia en la sede. Necesito ver si un ssh es conectable entre dos dispositivos sin llaves.cómo comprobar si sshd se ejecuta en una máquina remota

simplemente quiere comprobar si el sshd se está ejecutando de forma remota.

+1

'nmap' sería un buen candidato para este. Enumerará todos los puertos abiertos en un sistema, incluido ssh. – fduff

Respuesta

24

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.

Cuestiones relacionadas