Das Überprüfen von SSH-Schlüsseln hat Passphrasen

8

Ich habe eine Reihe von Benutzern, die mit SSH-Schlüsseln Zugriff auf Konten auf anderen Servern haben. Derzeit habe ich ein Skript, das die öffentlichen ssh-Schlüssel sammelt und an das richtige Konto auf den richtigen Servern verteilt.

Was ich tun möchte, ist, dieses Skript zu veranlassen, zu überprüfen, ob der SSH-Schlüssel eines bestimmten Benutzers eine Passphrase hat, bevor der öffentliche Schlüssel akzeptiert und verteilt wird.

Ich habe eine Reihe von Dingen ausprobiert, wie die Verwendung eines ssh-agentund, ssh-addund dann tritt das Problem auf, wenn ssh-addich nach einer Passphrase gefragt werde.

Gibt es eine Möglichkeit, eine opensslPassphrase zu überprüfen, die mit dem Rückkehrcode " 1Wenn der Schlüssel eine Passphrase hat" leicht fehlschlägt ?

Vielen Dank!

Peter Farmer
quelle
Könnten Sie die Anforderung klären , ob zu ist haben ein Passwort oder nicht , es zu haben - und wegen welchen Gründen?
user1686
Grawity: Meine Anforderung besteht darin, sicherzustellen, dass Benutzer Passphrasen für ihre SSH-Schlüssel festgelegt haben. Nur Schlüssel mit Passphrasen werden an die anderen Server verteilt.
Peter Farmer

Antworten:

11

Wenn eine Schlüsseldatei eine Passphrase verwendet, wird das Attribut "Proc-Type:" mit dem angehängten Wort "ENCRYPTED" festgelegt.

Sie können also feststellen, ob eine Schlüsseldatei eine Passphrase verwendet, indem Sie sie durchlaufen findund grepprüfen, ob sie die Zeichenfolge 'ENCRYPTED' enthält.

# 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

druckt eine Liste von Dateien mit Passphrasen. Anschließend können Sie diese mit einer Liste aller Schlüsseldateien abgleichen, um diejenigen auszuwählen, die keine Passphrase verwenden. Eine Liste aller Schlüsseldateien erhalten Sie, indem Sie den -execParameter wie folgt weglassen :

# list all keyfiles
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print
Jawa
quelle
Mit dem neuen SSH-Schlüsselformat nicht mehr möglich, der Proc-TypeHeader wird trotz Verschlüsselung nicht in die Datei geschrieben.
Oneiroi