Überprüfen, ob SSH-Schlüssel Passwörter enthalten

5473
Peter Farmer

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 sie an das richtige Konto auf den richtigen Servern verteilt.

Ich möchte, dass dieses Skript überprüft, ob der SSH-Schlüssel eines bestimmten Benutzers über eine Passphrase verfügt, bevor der öffentliche Schlüssel akzeptiert und verteilt wird.

Ich habe verschiedene Dinge ausprobiert, wie zum Beispiel ein ssh-agentund ssh-addund dann kommt das Problem, wenn ssh-addnach Passphrasen gefragt wird.

Gibt es eine Möglichkeit, etwas opensslauf Passphrasen zu überprüfen, mit einem Rückgabecode leicht ausfallen, 1wenn der Schlüssel eine Passphrase hat?

Vielen Dank!

8
Könnten Sie erläutern, ob es erforderlich ist, eine Passphrase _nicht_ zu haben - und aus welchen Gründen? grawity vor 13 Jahren 0
grawity: Meine Anforderung ist sicherzustellen, dass die Benutzer Passwörter für ihre SSH-Schlüssel festgelegt haben. Nur Schlüssel mit Passphrasen werden an die anderen Server verteilt. Peter Farmer vor 13 Jahren 0

1 Antwort auf die Frage

11
Jawa

Wenn eine Schlüsseldatei eine Passphrase verwendet, ist 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 lassen findund grepfeststellen, ob sie die Zeichenfolge 'ENCRYPTED' hat.

# 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, die Passwörter enthalten. Dann können Sie diese mit einer Liste aller Schlüsseldateien vergleichen, um diejenigen herauszufinden, die keine Passphrase verwenden. Eine Liste aller Schlüsseldateien erhalten Sie z. B. durch Auslassen des -execParameters:

# list all keyfiles HOMES=/home /mnt/nfs_home find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print