ssh-keygen nie tworzy klucza prywatnego RSA

70

Próbuję utworzyć klucz prywatny i mam problem.

Kiedy używam ssh-keygen -t rsa -b 4096 -C "[email protected]", otrzymuję klucz prywatny w następującym formacie.

-----BEGIN OPENSSH PRIVATE KEY-----
uTo43HGophPo5awKC8hoOz4KseENpgHDLxe5UX+amx8YrWvZCvsYRh4/wnwxijYx
...
-----END OPENSSH PRIVATE KEY-----

Nie jest to akceptowane w przypadku aplikacji, której próbuję użyć.

Oczekuję klucza w następującym formacie RSA.

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,25737CC2C70BFABADB1B4598BD8AB9E9

uTo43HGophPo5awKC8hoOz4KseENpgHDLxe5UX+amx8YrWvZCvsYRh4/wnwxijYx
...
-----END RSA PRIVATE KEY-----

Jak utworzyć poprawny format? To dziwne, ponieważ każdy inny Mac, który mam, tworzy poprawny format, z wyjątkiem tego, z którym mam problem.

Jestem na świeżo zainstalowanym Mac OS Mojave

Księżyc
źródło
a innych komputerów Mac nie ma w Mojave? Jestem też w Mojave i otrzymuję „nowy” format klucza openssh. Zakładam, że inne komputery Mac są w niższych wersjach. Sprawdź używaną wersję OpenSSL.
Zina
@Zina inne komputery Mac są również dostępne w Mojave i mają tę samą wersję OpenSSL.
Księżyc
RSA powinien być domyślnym typem. Co jeśli -t rsacałkowicie pominiesz tę opcję?
guzzijason
@guzzijason to samo. To doprowadza mnie do szału. Nawet jeśli pominę -t rsa na moim komputerze Mac (działającym), to poprawnie generuje RSA.
Księżyc
Miałem ten sam problem. Jako obejście użyłem starszej wersji openssh do wygenerowania klucza. Możesz sprawdzić, czy wygenerowany klucz jest poprawny, używając openssl rsa -text -in plik_klucza -passin 'pass: passphrase'. Wersja 7.4p1-16 działa.
typ

Odpowiedzi:

73

Ostatnio napotkałem ten sam problem (po uaktualnieniu do mojej wersji 10.14.1), oto 2 możliwe rozwiązania tego problemu.

  • Zmień wersję binarną ssh-keygen (możesz łatwo pobrać starą wersję z dowolnego obrazu linux / docker)

LUB

  • Dodaj opcję -m PEMdo polecenia ssh-keygen. Na przykład możesz uruchomić, ssh-keygen -m PEM -t rsa -b 4096 -C "[email protected]"aby zmusić ssh-keygen do wyeksportowania jako PEMformat.

Wygląda na to, że w obecnej wersji ssh-keygen w mojejve domyślny format eksportu jest taki, RFC4716jak wspomniano tutaj

Apolozeus
źródło
1
Domyślny format publickey eksportu to rzeczywiście rfc4716, ale format Q jest wewnętrznym formatem klucza prywatnego i jest „nowym” formatem OpenSSH, który nie istniał w 1999 roku (!) I nie jest już opisany w bieżącym; spróbuj 6.0 do 6.3.
dave_thompson_085
3
Nie jestem w stanie edytować odpowiedzi, ale proszę wyjaśnić, że 1. i 2. to niezależne rozwiązania, a nie kolejne kroki. NIE trzeba obniżać wersji w celu jednorazowego wygenerowania klucza. Wystarczy dodać-m PEM
sdoxsee
47

Nowe klucze w formacie klucza prywatnego OpenSSH można przekonwertować za pomocą narzędzia ssh-keygen na stary format PEM.

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

Nie ma potrzeby przejścia na starszą wersję OpenSSH, aby osiągnąć ten wynik.

misterium
źródło
Tak. Jak już wspomniałem w komentarzach do zaakceptowanej odpowiedzi. serverfault.com/questions/939909/…
sdoxsee
8
W przyjętej odpowiedzi nie jest jasne, że nie trzeba tworzyć nowej pary kluczy. Możesz wziąć istniejący klucz i przekonwertować je za pomocą tego polecenia. Zastępuje plik, więc uważam, że dobrym pomysłem jest wcześniejsze utworzenie kopii zapasowej, na wszelki wypadek.
martintama
Dziękujemy za dodanie instrukcji dotyczących konwersji istniejącego klucza prywatnego na format RSA. Właśnie uratowałem mój bekon!
Craig Blaszczyk