Vérification des clés de passe SSH

8

J'ai un tas d'utilisateurs, qui avec des clés SSH ont accès à des comptes sur d'autres serveurs. Actuellement, j'ai un script qui recueille les clés publiques ssh et les distribue au bon compte sur les bons serveurs.

Ce que je veux faire, c'est obtenir ce script pour vérifier que la clé ssh d'un utilisateur donné a une phrase de passe avant d'accepter la clé publique et de la distribuer.

J'ai essayé un certain nombre de choses, comme l' utilisation d' un ssh-agentet ssh-addpuis le problème vient quand ssh-addobtient demandé passphrase.

Existe-t-il un moyen d'obtenir quelque chose comme opensslvérifier la phrase secrète, échouer légèrement avec un code retour 1si la clé a une phrase secrète?

Merci!

Peter Farmer
la source
Pourriez-vous préciser si l'exigence est d' avoir ou non une phrase secrète - et pour quelles raisons?
user1686
grawity: Mon exigence est de m'assurer que les utilisateurs ont défini des phrases de passe sur leurs clés ssh, seules les clés avec des phrases de passe seront distribuées aux autres serveurs.
Peter Farmer

Réponses:

11

Si un fichier de clés utilise une phrase secrète, il a l'attribut "Proc-Type:" défini avec le mot "ENCRYPTED" ajouté.

Ainsi, vous pouvez déterminer si un fichier clé utilise une phrase secrète en l'exécutant findet greppour voir s'il contient la chaîne 'ENCRYPTED'.

# list keyfiles that USE a passphrase
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -exec grep -q "ENCRYPTED" {} \; -print

imprime une liste des fichiers qui ont des phrases secrètes. Ensuite, vous pouvez comparer ceux-ci à une liste de tous les fichiers clés pour distinguer ceux qui n'utilisent pas de phrase secrète. Une liste de tous les fichiers clés peut être obtenue, par exemple en omettant le -execparamètre, comme suit:

# list all keyfiles
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print
Jawa
la source
Plus possible avec le nouveau format de clé SSH, l'en- Proc-Typetête n'est pas écrit dans le fichier, bien qu'il soit chiffré.
Oneiroi