¿Cómo verificar si puedo iniciar sesión en el servidor a través de ssh?

13

Tengo una lista de servidores:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

¿Cómo puedo verificar que puedo iniciar sesión a través de ssh o no? Quiero decir que, por defecto, debería poder iniciar sesión a través de ssh key auth .., así que, en resumen, necesito una solución que clasifique las líneas (servidores) en la lista.txt de esta manera:

  • servidores en los que puedo iniciar sesión mediante la clave ssh
  • servidores que solicitan contraseña (por supuesto, la contraseña es desconocida ..)
  • servidores inalcanzables
LanceBaynes
fuente
con la ayuda de comandos ssh y ping, puede lograrlo
Balaswamy vaddeman
pingNo es realmente un buen indicador. Hay muchas configuraciones que permiten sshconexiones pero no responden a pings.
Mat

Respuestas:

25

Puede hacerlo con una combinación de la BatchModeopción y "analizar" la salida. ( sshsiempre devuelve 255 si no se conecta por alguna razón, por lo que no puede usar el código de retorno para distinguir entre tipos de fallas).

Con BatchModeactivado, no se intenta solicitar una contraseña u otra interacción, por lo que fallará una conexión que requiera una contraseña. (También puse un ConnectTimeoutallí que debería ajustarse para satisfacer sus necesidades. Y elegí nombres de archivo realmente malos).

#! /bin/bash

rm good no_auth other
while read ip host ; do
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
    case $status in
        ok) echo $ip $host >> good ;;
        *"Permission denied"*) echo $ip $host $status >> no_auth ;;
        *) echo $ip $host $status >> other ;;
    esac
done < list.txt

Podría detectar otros tipos de errores (como la falta de clave pública del servidor) si necesita una clasificación más detallada. Si necesita los resultados en un único archivo ordenado, solo catlos distintos archivos de salida juntos como mejor le parezca.

Estera
fuente
1

Busque las diversas herramientas que automatizan la ejecución de comandos en varios hosts a través de ssh. Por ejemplo, con Mussh :

mussh -H hosts.txt -o ConnectTimeout=5 -P -d -c 'echo `hostname` is alive'

Masajee la salida según sea necesario.

Nota al margen: ¿por qué está almacenando direcciones IP list.txt? Los nombres del servidor son suficientes. Si los nombres que desea usar no son nombres DNS, use Hostdirectivas en ~/.ssh/config.

Gilles 'SO- deja de ser malvado'
fuente
0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

esperar proporcionará información para sus comandos interactivos. El cliente ssh con el indicador -v le dirá qué métodos de autenticación acepta el servidor. Si llega a la solicitud interactiva, haga que se cierre. Haz lo que quieras, tienes todo lo que necesitas.

servers that are unreachable

Igual, una orden para gobernarlos a todos, y en la oscuridad, atarlos ... Hum.

Aki
fuente
0

El comando mussh solo generará errores, por lo que puede ejecutarlo sin depurarlo.

$ cat list.txt
10.1.2.93       trustme
10.1.2.92       wobudong
10.41.41.41     failhost

$ awk '{print $2}' list.txt | mussh -H - -t 10 -m -c hostname
trustme: trustme
failhost: ssh: Could not resolve hostname failhost: Name or service not known
wobudong: ssh: connect to host wobudong port 22: Connection timed out
pdxdoughnut
fuente