web-dev-qa-db-fra.com

Comment lister les clés ajoutées à ssh-agent avec ssh-add?

Comment et où puis-je vérifier quelles clés ont été ajoutées avec ssh-add à mon ssh-agent?

230
Patryk

Utilisez le -l option pour ssh-add pour les répertorier par empreinte digitale.

$ ssh-add -l
2048 72:...:eb /home/gert/.ssh/mykey (RSA)

Ou avec -L pour obtenir la clé complète au format OpenSSH.

$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]B63SQ== /home/gert/.ssh/id_rsa

Ce dernier format est le même que vous les mettriez dans un ~/.ssh/authorized_keys fichier.

278
gertvdijk

Étonnamment, la version MacOS de ssh-add À un moment donné a cessé de montrer le nom du fichier comme avec la variante Linux. J'ai écrit ce script qui fait de même pour les empreintes digitales qui ont un fichier correspondant dans ~/.ssh/.

J'appelle la fonction ssh-add_wf, Wf = avec fichier. Les détails sur la fonction sont ci-dessous:

$ type ssh-add_wf
ssh-add_wf is a function
ssh-add_wf ()
{
    while read -r line; do
        for file in ~/.ssh/*.pub;
        do
            printf "%s %s\n" "$(ssh-keygen -lf "$file" | awk '{$1=""}1')" "$file";
        done | column -t | grep --color=auto "$line" || echo "$line";
    done < <(ssh-add -l | awk '{print $2}')
}

Exemple

$  ssh-add_wf
 SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:qInIrnKcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:tX+AAJA0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 SHA256:EyNkhTLQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:KKKVwtvFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 SHA256:tr0hZP52XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ci-dessus, toutes les clés de la sortie de ssh-add Qui correspondent à un fichier du répertoire ~/.ssh/ Incluront le nom du fichier dans la sortie de la 4e colonne. Toutes les clés qui ne l'ont pas auront cette colonne vide. Dans cette sortie, nous avons 3 clés dont les fichiers correspondent.

Mécanique de la fonction

Le script utilise 2 boucles. La boucle extérieure est un while qui prend la sortie de ssh-add. Cette sortie correspond à toutes les empreintes digitales des clés SSH chargées dans ssh-agent.

La boucle intérieure est une boucle for qui passe par le contenu de tous les fichiers correspondant à ce modèle, ~/.ssh/*.pub. Pour chaque fichier, nous l'interrogons avec ssh-keygen -lf <file> Puis déposons la première colonne de cette sortie:

... avant ...

4096 SHA256: mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [email protected]

... après ...

SHA256: mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [email protected]

Cette chaîne est ensuite imprimée avec le nom du fichier:

printf "% s% s\n" "$ (ssh-keygen -lf" $ file "| awk '{$ 1 =" "} 1')" "$ file"

À la fin de l'exécution de cette boucle, voici ce qui suit:

| colonne -t | grep "$ line" || echo "$ line"

Cela formate la sortie afin qu'elle soit formatée en colonne (column -t).

À ce stade, nous examinons cette sortie pour l'empreinte digitale de ssh-add Via le grep "$line". Si une correspondance est trouvée, nous imprimons notre sortie printf, sinon nous revenons à l'impression de l'empreinte digitale originale à partir de ssh-add, $line.

Références

0
slm