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:
ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)
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:
ssh-keyscan
est un utilitaire permettant de rassembler les clés d’hôte ssh publiques d’un certain nombre d’hôtes. Il a été conçu pour faciliter la construction et la vérification des
ssh_known_hosts
fichiers.
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) et ed25519
(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ète rsa1
(protocole SSH 1), il fallait donc spécifier explicitement les types de clé:
ssh-keyscan -t rsa,dsa hostname
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:
ssh-keygen -lf <(ssh-keyscan hostname 2>/dev/null)
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:
ssh-keygen -E md5 -lf <(ssh-keyscan hostname 2>/dev/null)
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é car ssh-keygen
acceptera -
comme nom de fichier pour le flux d'entrée standard, permettant ainsi une commande de pipeline d'une ligne.
ssh-keyscan hostname 2>/dev/null | ssh-keygen -E md5 -lf -
ssh-keygen -l -f - <(ssh-keyscan host)
- être que, cependant?