Existe-t-il un moyen d' obtenir par programme une empreinte de clé de serveur SSH sans s'authentifier auprès de celle-ci?
J'essaie ssh -v user@host false 2>&1 | grep "Server host key"
, mais l'attente d'un mot de passe est suspendue si l'authentification par clé n'est pas configurée.
ssh-keygen -l -f - <(ssh-keyscan host)
- être que, cependant?ssh-keyscan host | ssh-keygen -lf -
ssh-keygen -l -f <(ssh-keyscan host)
ssh-keygen -l -f -
fonctionne vraiment comme prévu dans ssh-keygen 7.2 et supérieur. Il produit des lignes de commentaires à STDERR qui peuvent être filtrées, comme mentionné dans la réponse de Anthony Geoghegan oussh-keyscan host 2>/dev/null | ssh-keygen -l -f -
J'ai récemment eu à le faire moi-même, alors j'ai pensé ajouter une réponse qui montre comment cela peut être fait (avec les versions d' OpenSSH 7.2 ou plus récentes ) sur une ligne en utilisant la substitution de processus:
Le texte suivant explique le fonctionnement de ces commandes et met en évidence certaines des différences de comportement entre les versions les plus anciennes et les plus récentes des utilitaires OpenSSH.
Récupérer les clés de l'hôte public
La
ssh-keyscan
commande a été développée pour que les utilisateurs puissent obtenir des clés d’hôte publiques sans s’authentifier auprès du serveur SSH. De sa page de manuel:Type de clé
Le type de clé à récupérer est spécifié à l'aide de l'
-t
option.rsa1
(version 1 du protocole SSH obsolète)rsa
dsa
ecdsa
(versions récentes d'OpenSSH)ed25519
(versions récentes d'OpenSSH)Dans les versions récentes d'OpenSSH, les types de clé à récupérer par défaut sont
rsa
(depuis la version 5.1),ecdsa
(depuis la version 6.0) eted25519
(depuis la version 6.7).Avec les anciennes versions de
ssh-keyscan
(avant OpenSSH version 5.1), le type de clé par défaut étant obsolètersa1
(protocole SSH 1), il fallait donc spécifier explicitement les types de clé:Récupère les empreintes digitales des clés Base64
ssh-keyscan
imprime la clé d’hôte du serveur SSH au format codé Base64 . Pour convertir ceci en un hachage d'empreinte digitale, l'ssh-keygen
utilitaire peut être utilisé avec son-l
option pour imprimer l'empreinte digitale de la clé publique spécifiée.Si vous utilisez Bash, Zsh (ou le shell Korn), la substitution de processus peut être utilisée pour un one-liner très pratique:
Remarque : Avec les versions d'OpenSSH antérieures à 7.2, les fonctions utilisées par
ssh-keygen
pour lire les fichiers ne géraient pas très bien les canaux nommés (FIFO), de sorte que cette méthode ne fonctionnait pas et nécessitait donc l'utilisation de fichiers temporaires.Algorithmes de hachage
Les versions récentes des
ssh-keygen
empreintes d' empreinte digitales SHA256 des clés. Pour obtenir les hachages MD5 des empreintes de clé de serveur (l'ancien comportement), l'-E
option peut être utilisée pour spécifier l'algorithme de hachage:Utiliser un pipeline
Si vous utilisez un shell POSIX (tel que
dash
) qui ne comporte pas de substitution de processus, les autres solutions utilisant des fichiers temporaires fonctionneront. Cependant, avec les versions plus récentes d'OpenSSH (depuis la version 7.2), un simple pipeline peut être utilisé carssh-keygen
acceptera-
comme nom de fichier pour le flux d'entrée standard, permettant ainsi une commande de pipeline d'une ligne.la source
ssh-keygen
des versions plus anciennes d'OpenSSH ont un problème de lecture à partir du tube FIFO / named. J'examinerai cela (et actualiserai ma réponse) lorsque j'aurai du temps libre.printf
instructions de débogage dans lado_fingerprint()
fonction, j'ai constaté qu'avec les versions d'OpenSSH antérieures à 7.2, les fonctions utilisées par lesssh-keygen
fichiers pour lire les fichiers ne géraient pas très bien la méthode de substitution de processus ne fonctionnerait pas.nmap
fournit cette capacité en utilisant lessh-hostkey
script.Pour renvoyer l'empreinte hexadécimale de la clé:
Pour retourner le contenu de la clé:
Pour retourner la bulle visuelle de la clé
Pour renvoyer tout ce qui précède:
Source: docs nmap
la source
-p
option qui peut spécifier un port, par exemple-p 22000
. Il est également possible d'utiliser l'-vv
option pour augmenter la verbosité (quantité d'informations fournies)filezilla affiche les clés hachées avec md5 au format hexadécimal .
pour le trouver sur votre machine linux ubuntu , utilisez cette commande:
remarque: remplacez "localhost" par l'adresse IP de la machine que vous souhaitez vérifier.
la source
Voici un script shell (principalement shell Bourne mais utilisant le
local
mot-clé, qui est disponible dans la plupart des logiciels modernes/bin/sh
), je l’ai écrit pour le faire. Utilisez-le commessh-hostkey hostname
. Il affichera les empreintes digitales des formats sha256 et md5 pour toutes les clés hôte pour le nom d'hôte ou l'adresse IP donné. Vous pouvez également spécifier manuellement "md5
" ou "sha256
" en tant que deuxième argument pour afficher uniquement ce format particulier.Il utilise un fichier temporaire à la place de la tuyauterie pour le rendre compatible avec les anciens packages OpenSSH (comme décrit dans d'autres réponses). Le fichier temporaire utilise
/dev/shm
(mémoire partagée) s'il est disponible.la source