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.
PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
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 chcesz echo 5 > id_rsa
usunąć klucz prywatny, to wykonaj diff, diff przejdzie! Również uruchamianie ssh-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,
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:
ssh-keygen -y -f id_rsa | cut -d' ' -f 2
z
cut -d' ' -f 2 id_rsa.pub
W związku z tym:
diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)
Być może nie jest to tak elastyczne, ale lepiej dla moich potrzeb. Może to pomaga komuś innemu.
Jeśli są w systemie lokalnym, trzymać id_rsa.pub
w twojej $HOME/.ssh/authorized_keys
i ssh
do localhost
korzystania z id_rsa
klucza. Jeśli to działa, to pasują do siebie.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
też bardzo pomaga.