Comment vérifier si je peux me connecter au serveur via ssh?

13

J'ai une liste de serveurs:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Comment puis-je vérifier que je peux me connecter via ssh ou non? Je veux dire par défaut que je devrais pouvoir me connecter via la clé ssh auth .., donc en bref, j'ai besoin d'une solution qui trie les lignes (serveurs) dans le list.txt comme ceci:

  • serveurs que je peux me connecter via la clé ssh
  • serveurs qui demandent le mot de passe (bien sûr le mot de passe est inconnu ..)
  • serveurs inaccessibles
LanceBaynes
la source
avec l'aide des commandes ssh et ping, vous pouvez y parvenir
Balaswamy vaddeman
pingn'est pas vraiment un bon indicateur. Il existe de nombreuses configurations qui autorisent les sshconnexions mais ne répondent pas aux pings.
Mat

Réponses:

25

Vous pouvez le faire avec une combinaison de l' BatchModeoption et "analyser" la sortie. ( sshrenvoie toujours 255 s'il ne parvient pas à se connecter pour une raison quelconque, vous ne pouvez donc pas utiliser le code de retour pour distinguer les types d'échecs.)

Si cette BatchModeoption est activée, aucune invite de mot de passe ni aucune autre interaction n'est tentée. Par conséquent, une connexion nécessitant un mot de passe échouera. (J'y ai également mis un ConnectTimeoutqui devrait être ajusté pour répondre à vos besoins. Et j'ai choisi des noms de fichiers vraiment mauvais.)

#! /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

Vous pouvez détecter d'autres types d'erreurs (comme une clé publique de serveur manquante) si vous avez besoin d'une classification plus détaillée. Si vous avez besoin des résultats dans un seul fichier trié, il suffit de catregrouper les différents fichiers de sortie comme bon vous semble.

Tapis
la source
1

Recherchez les différents outils qui automatisent l'exécution de commandes sur plusieurs hôtes via ssh. Par exemple, avec Mussh :

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

Massez la sortie au besoin.

Note latérale: pourquoi stockez-vous des adresses IP list.txt? Les noms de serveur suffisent. Si les noms que vous souhaitez utiliser ne sont pas les noms DNS, utilisez les Hostdirectives dans ~/.ssh/config.

Gilles 'SO- arrête d'être méchant'
la source
0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

attend fournira une entrée à vos commandes interactives. Le client ssh avec l'indicateur -v vous indiquera les méthodes d'authentification acceptées par le serveur. Si vous obtenez l'invite interactive, fermez-la. Faites ce que vous voulez, vous avez tout ce dont vous avez besoin.

servers that are unreachable

Idem, un seul ordre pour les gouverner tous, et dans l'obscurité, les lier ... Hum.

Aki
la source
0

La commande mussh ne produira que des erreurs, vous pouvez donc simplement l'exécuter sans débogage.

$ 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
la source