Sprawdzanie kluczy ssh ma hasła

8

Mam grupę użytkowników, którzy za pomocą kluczy SSH mają dostęp do kont na innych serwerach. Obecnie mam skrypt, który zbiera klucze publiczne ssh i dystrybuuje je na odpowiednie konto na odpowiednich serwerach.

Chcę, aby ten skrypt sprawdził, czy dany klucz ssh danego użytkownika ma hasło przed zaakceptowaniem klucza publicznego i jego rozpowszechnieniem.

Próbowałem wielu rzeczy, takich jak używanie ssh-agenta, ssh-adda potem pojawia się problem, gdy pojawia ssh-addsię prośba o hasło.

Czy istnieje sposób, aby uzyskać coś takiego jak opensslsprawdzenie hasła, nieznacznie nie powiodło się z kodem powrotu, 1jeśli klucz ma hasło?

Dzięki!

Peter Farmer
źródło
Czy możesz wyjaśnić, czy warunkiem jest posiadanie hasła, czy nie - i z jakich powodów?
user1686,
grawitacja: Moim wymaganiem jest upewnienie się, że użytkownicy ustawili hasła na swoich kluczach ssh, tylko klucze z hasłami będą dystrybuowane na inne serwery.
Peter Farmer

Odpowiedzi:

11

Jeśli plik klucza używa hasła, to ma atrybut „Proc-Type:” z dołączonym słowem „SZYFROWANY”.

Możesz więc ustalić, czy plik klucza używa hasła, uruchamiając go findi grepsprawdzając, czy ma ciąg „SZYFROWANY”.

# 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

wypisuje listę plików z hasłami. Następnie możesz dopasować je do listy wszystkich plików kluczy, aby wyróżnić te, które nie używają hasła. Listę wszystkich plików kluczy można uzyskać, np. Przez pominięcie -execparametru, w następujący sposób:

# list all keyfiles
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print
Jawa
źródło
W nowym formacie klucza SSH nie jest to już możliwe, Proc-Typenagłówek nie jest zapisywany w pliku, mimo że jest szyfrowany.
Oneiroi