54 votes

Comment obtenir toutes les empreintes digitales du fichier .ssh/authorized_keys(2) ?

Existe-t-il un moyen simple d'obtenir une liste de toutes les empreintes digitales saisies dans le fichier .ssh/authorized_keys || .ssh/authorized_keys2 ?

ssh-keygen -l -f .ssh/authorized_keys 

ne renvoie que l'empreinte digitale de la première ligne / entrée / clé publique

hack avec awk :

awk 'BEGIN { 
    while (getline < ".ssh/authorized_keys") {
        if ($1!~"ssh-(r|d)sa") {continue}
        print "Fingerprint for "$3
        system("echo " "\""$0"\"> /tmp/authorizedPublicKey.scan; \
            ssh-keygen -l -f /tmp/authorizedPublicKey.scan; \
            rm /tmp/authorizedPublicKey.scan"
        )
    }
}'

mais y a-t-il un moyen plus simple ou une commande ssh que je n'ai pas trouvée ?

0voto

eight Stacker Points 9

Si et quand la lecture de /dev/stdin il s'agit d'une question que vous pouvez utiliser redirection de processus sans fichiers temporaires :

while read -r l; do
  [[ -n "$l" && ${l###} = "$l" ]] && ssh-keygen -l -f <(echo "$l");
done < .ssh/authorized_keys

0voto

Plutoberth Points 101

Il s'agit d'une version de Réponse de aphink qui fonctionnera sur tous les shells compatibles avec sh.

fingerprints() {
    _fingerprints_file="${1:-$HOME/.ssh/authorized_keys}"
    while read -r l; do
        [ -n "$l" ] && [ "${l###}" = "$l" ] && printf '%s\n' "$l" | ssh-keygen -l -f /dev/stdin
    done < "${_fingerprints_file}"
    unset _fingerprints_file
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X