Odpowiedzi:
Znalazłem sposób, który wydaje się działać lepiej dla mnie:
ssh-keygen -y -f <private key file>
to polecenie wyświetli klucz publiczny dla podanego klucza prywatnego, więc po prostu porównaj wynik z każdym plikiem * .pub.
id_rsa.pub.blahhost
plików i nie wiedziałem, który z nich pasuje do pojedynczego id_rsa
klucza prywatnego i ustawiam scp bez hasła, aby móc migrować ze starych witryn. Tworzenie nowej pary kluczy nie wchodzi w grę; Mam dobrze skonfigurowane klucze i nie zamierzam tego zepsuć.
Zawsze porównuję skrót MD5 modułu za pomocą tych poleceń:
Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5
Jeśli skróty pasują, te dwa pliki idą w parze.
W przypadku kluczy DSA użyj
openssl dsa -pubin -in dsa.pub -modulus -noout
wydrukować klucze publiczne
openssl dsa -in dsa.key -modulus -noout
aby wyświetlić klucze publiczne odpowiadające kluczowi prywatnemu, a następnie je porównaj.
Zakładając, że masz klucze publiczne wewnątrz certyfikatów x.509 i zakładając, że są to klucze RSA, to dla każdego klucza publicznego wykonaj
openssl x509 -in certfile -modulus -noout
Zrób dla każdego klucza prywatnego
openssl rsa -in keyfile -modulus -noout
Następnie dopasuj klawisze według modułu.
Sprawdzenie można ułatwić dzięki diff:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
Jedyną dziwną rzeczą jest to, że diff nic nie mówi, jeśli pliki są takie same, więc zostaniesz poinformowany tylko wtedy, gdy publiczne i prywatne nie pasują.
diff -s
diff -qs
zwraca prostą „identyczną / nie identyczną odpowiedź. (2) przed uruchomieniem różnicy należy usunąć komentarz z pliku klucza publicznego.
Usuń klucze publiczne i wygeneruj nowe z kluczy prywatnych. Przechowuj je w osobnych katalogach lub użyj konwencji nazewnictwa, aby zachować prostotę.
Wpisz następujące polecenie, aby sprawdzić, czy klucz prywatny i klucz publiczny są zgodnymi zestawami (identycznymi), czy nie pasującymi zestawami (różnią się) w katalogu $ USER / .ssh. Polecenie cut zapobiega porównywaniu komentarza na końcu wiersza w kluczu publicznym, umożliwiając porównanie tylko klucza.
ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
Wynik będzie wyglądał jak jedna z tych linii.
Files - and /dev/fd/63 are identical
Files - and /dev/fd/63 differ
Napisałem skrypt powłoki, którego użytkownicy używają do sprawdzania uprawnień do plików ~ / .ssh / i dopasowanego zestawu kluczy. Rozwiązuje moje problemy związane z incydentami użytkowników podczas konfigurowania ssh. To może ci pomóc. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh
Uwaga: moja poprzednia odpowiedź (z marca 2018 r.) Nie działa już z najnowszymi wydaniami openssh. Poprzednia odpowiedź: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)
Zaszyfruj coś za pomocą klucza publicznego i zobacz, który klucz prywatny to odszyfruje.
Ten artykuł dotyczący kodu projektu autorstwa Jeffa Atwooda implementuje uproszczone opakowanie wokół klas kryptograficznych .NET. Zakładając, że te klucze zostały utworzone do użytku z RSA, użyj asymetrycznej klasy z kluczem publicznym do szyfrowania i to samo z kluczem prywatnym do odszyfrowania.
Jeśli nic nie zwróci, pasują do:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost