ssh-keygen -y -e -f <private key>pobiera klucz prywatny i drukuje odpowiedni klucz publiczny, który można bezpośrednio porównać z dostępnymi kluczami publicznymi. (Wskazówka: strzeż się komentarzy i kluczowych opcji).
(Jak do diabła to robi? Mogę mieć tylko nadzieję, że klucz publiczny jest zakodowany bezpośrednio lub pośrednio w kluczu prywatnym ...)
Sam tego potrzebowałem i użyłem następującego linera Bash. Nie powinien wypisywać niczego, jeśli klucze należą do siebie. Zastosuj trochę -qdo diff w skryptach, a diff tylko odpowiednio ustawia kod powrotu.
@MichaelHampton: teraz rozumiem twój komentarz. „zaakceptowana odpowiedź” powinna odnosić się do pytania o
przepełnienie stosu, a
1
@Sirch: Myślałem, że decyzja, który klucz jest prywatny, a który publiczny, jest czysto losowa, ponieważ dwa klucze są równe. To, co szyfruje jeden klucz, można odszyfrować tylko drugim. A jeśli jeden klucz można by uzyskać od drugiego, to wszystko by się nie udało.
Michuelnik
1
@Michuelnik Możesz uzyskać klucz publiczny z klucza prywatnego. Nie możesz uzyskać klucza prywatnego z klucza publicznego. Nie mówiliśmy o materiale, który szyfruje.
Sirch,
1
@Michuelnik imho, pytanie jest nie na temat na SO i na temat tutaj (i / lub Superuser). imho, nie powinien być oznaczony jako duplikat i zamiast tego oznaczony tam do migracji. Ale dotyczy to obu, więc lubię pełniejsze udostępnianie informacji.
Chris K,
10
Tak długo, jak istnieje ssh-keygen -y -e -f id_rsaplik id_rsa.pub , nie będzie w ogóle sprawdzał pliku id_rsa.pub, ale po prostu zwróci wartość z pliku id_rsa.pub. Tak więc np. Jeśli chcesz echo 5 > id_rsausunąć klucz prywatny, to wykonaj diff, diff przejdzie! Również uruchamianie ssh-keygen -yef footam , gdzie foo nie jest prawidłowym kluczem (i nie ma odpowiadającego foo.pub), blokuje oczekiwanie na dane wejściowe użytkownika, więc należy zachować ostrożność, używając go w skrypcie.
31
W zależności od tego, skąd otrzymujesz testowany plik klucza publicznego, zaakceptowana odpowiedź może dać fałszywie pozytywne wyniki. Wynika to z zachowania opisanego w komentarzu @drewbenn. W szczególności, gdy opcja -e jest używana z plikiem klucza prywatnego jako parametrem opcji -f, po prostu papuguje (ale formatuje) to, co jest w powiązanym pliku klucza publicznego.
Innymi słowy,
ssh-keygen -y -f id_rsa
(najwyraźniej) generuje wartość klucza publicznego, oraz
ssh-keygen -y -e -f id_rsa
po prostu i wypisuje (i formatuje) klucz w istniejącym pliku id_rsa.pub, cokolwiek to jest .
W moim przypadku muszę sprawdzić, czy para nie została uszkodzona. Postanowiłem więc porównać następujące elementy:
To naprawdę powinno zastąpić przyjętą odpowiedź lub przynajmniej przewyższyć ją pod względem głosów pozytywnych.
thomanski
Dziękuję Ci! To polecenie nie działa z kluczami z hasłem, nie wymaga tego interaktywnie. Wyodrębniłem zawartość dwóch () poleceń do plików i udostępniłem je, co działa.
Yaroslav Nikitenko
5
Jeśli są w systemie lokalnym, trzymać id_rsa.pubw twojej $HOME/.ssh/authorized_keysi sshdo localhostkorzystania z id_rsaklucza. Jeśli to działa, to pasują do siebie.
ssh -v
też bardzo pomaga.Odpowiedzi:
Wolę
ssh-keygen -y -e -f <private key>
sposób zamiast akceptowanej odpowiedzi Jak testować publiczną / prywatną parę kluczy DSA? na przepełnienie stosu.ssh-keygen -y -e -f <private key>
pobiera klucz prywatny i drukuje odpowiedni klucz publiczny, który można bezpośrednio porównać z dostępnymi kluczami publicznymi. (Wskazówka: strzeż się komentarzy i kluczowych opcji).(Jak do diabła to robi? Mogę mieć tylko nadzieję, że klucz publiczny jest zakodowany bezpośrednio lub pośrednio w kluczu prywatnym ...)
Sam tego potrzebowałem i użyłem następującego linera Bash. Nie powinien wypisywać niczego, jeśli klucze należą do siebie. Zastosuj trochę
-q
do diff w skryptach, a diff tylko odpowiednio ustawia kod powrotu.źródło
ssh-keygen -y -e -f id_rsa
plik id_rsa.pub , nie będzie w ogóle sprawdzał pliku id_rsa.pub, ale po prostu zwróci wartość z pliku id_rsa.pub. Tak więc np. Jeśli chceszecho 5 > id_rsa
usunąć klucz prywatny, to wykonaj diff, diff przejdzie! Również uruchamianiessh-keygen -yef foo
tam , gdzie foo nie jest prawidłowym kluczem (i nie ma odpowiadającego foo.pub), blokuje oczekiwanie na dane wejściowe użytkownika, więc należy zachować ostrożność, używając go w skrypcie.W zależności od tego, skąd otrzymujesz testowany plik klucza publicznego, zaakceptowana odpowiedź może dać fałszywie pozytywne wyniki. Wynika to z zachowania opisanego w komentarzu @drewbenn. W szczególności, gdy opcja -e jest używana z plikiem klucza prywatnego jako parametrem opcji -f, po prostu papuguje (ale formatuje) to, co jest w powiązanym pliku klucza publicznego.
Innymi słowy,
(najwyraźniej) generuje wartość klucza publicznego, oraz
po prostu i wypisuje (i formatuje) klucz w istniejącym pliku id_rsa.pub, cokolwiek to jest .
W moim przypadku muszę sprawdzić, czy para nie została uszkodzona. Postanowiłem więc porównać następujące elementy:
z
W związku z tym:
Być może nie jest to tak elastyczne, ale lepiej dla moich potrzeb. Może to pomaga komuś innemu.
źródło
Jeśli są w systemie lokalnym, trzymać
id_rsa.pub
w twojej$HOME/.ssh/authorized_keys
issh
dolocalhost
korzystania zid_rsa
klucza. Jeśli to działa, to pasują do siebie.źródło