Konwertuj klucz prywatny OpenSSH na klucz prywatny SSH2

29

Czy istnieje sposób na konwersję istniejącej pary kluczy OpenSSH na parę kluczy SSH2 (format ssh.com)?

UPD : ponieważ istnieją pewne odpowiedzi na temat ssh-keygennagle pojawiły się, wyjaśnię skąd pochodzę (również będzie to ładna odpowiedź na „co próbowałeś?”).

$> diff --report-identical-files <(ssh-keygen -e -f ~/.ssh/id_dsa) <(ssh-keygen -e -f ~/.ssh/id_dsa.pub)
Files /tmp/zshAGGWAK and /tmp/zshPZiIr6 are identical

Innymi słowy, ssh-keygenzwraca te same klucze dla prywatnych i publicznych kluczy wejściowych (skróty oryginalnych plików są oczywiście różne, sprawdziłem je dwa razy, aby upewnić się, że są poprawnymi kluczami prywatnymi i publicznymi). Wygląda na to, że ssh-keygengeneruje tylko klucz publiczny dla prywatnego lub publicznego klucza wejściowego.

Robię to źle, czy to jest normalne zachowanie?

ДМИТРИЙ МАЛИКОВ
źródło

Odpowiedzi:

43

Ten samouczek zatytułowany: SSH: Konwertuj OpenSSH na SSH2 i vice versa wydaje się oferować to, czego szukasz.

Konwertuj klucz OpenSSH na klucz SSH2

Uruchom wersję OpenSSH ssh-keygenna kluczu publicznym OpenSSH, aby przekonwertować go na format wymagany przez SSH2 na zdalnym komputerze. Należy to zrobić w systemie z OpenSSH.

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub

Konwertuj klucz SSH2 na klucz OpenSSH

Uruchom wersję OpenSSH ssh-keygenna kluczu publicznym ssh2, aby przekonwertować go na format wymagany przez OpenSSH. Należy to zrobić w systemie z OpenSSH.

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub

Samouczek pokazuje, jak zarówno generować różne typy kluczy, jak i eksportować je do innych formatów.

Używać tego do kluczy prywatnych i publicznych?

Według strony podręcznika odpowiedź brzmi „tak”. Patrząc na stronę ssh-keygenpodręcznika, znajduje się dla -eprzełącznika następujące informacje:

 -e    This option will read a private or public OpenSSH key file and print
       the key in RFC 4716 SSH Public Key File Format to stdout.  This option
       allows exporting keys for use by several commercial SSH implementations.

Ale w praktyce wydaje się, że ssh-keygennie można konwertować kluczy prywatnych, tylko publicznych.

Na przykład:

# Make a new RSA key-pair
$ ssh-keygen -t rsa -f newkey

# attempt to extract the private key
$ ssh-keygen -e -f newkey > newkey_e

# attempt to extract the public key
$ ssh-keygen -e -f newkey.pub > newkey.pub_e

# Notice the supposed extracted private key (newkey_e) and the corresponding extracted public key (newkey.pub_e) have identical `md5sum`'s.
$ for i in *;do md5sum $i;done
d1bd1c12c4a2b9fee4b5f8f83150cf1a  newkey
8b67a7be646918afc7a041119e863be5  newkey_e
13947789d5dcc5322768bd8a2d3f562a  newkey.pub
8b67a7be646918afc7a041119e863be5  newkey.pub_e

Spojrzenie na uzyskane klucze wyodrębnia to:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----

Trochę googlując natknąłem się na ten artykuł z artykułu zatytułowanego: Jak przekonwertować pliki kluczy prywatnych OpenSSH na SSH . Strona wydawała się być w górę i w dół, ale szukając tej strony w pamięci podręcznej Google, znalazłem następujący komunikat:

Jak przekonwertować pliki kluczy prywatnych OpenSSH na pliki kluczy prywatnych SSH.com?

Nie może tego zrobić program ssh-keygen, nawet jeśli większość stron podręcznika man tak mówi. Odradzają to, abyś używał wielu kluczy publicznych. Jedynym problemem jest to, że RCF nie pozwoli ci zarejestrować więcej niż jednego klucza publicznego.

W artykule omówiono metodę konwersji klucza prywatnego openssh na klucz prywatny ssh.com za pomocą narzędzia PuTTY puttygen . UWAGA: puttygen można uruchomić z systemu Windows i Linux.

Otwórz 'puttygen' i wygeneruj 2048-bitową parę kluczy publiczny / prywatny RSA. Pamiętaj, aby dodać hasło po jego wygenerowaniu. Zapisz klucz publiczny jako „puttystyle.pub” i zapisz klucz prywatny jako „puttystyle”. Program putty i programy SSH.com mają wspólny format klucza publicznego, ale program putty i OpenSSH mają różne formaty klucza publicznego. Wrócimy do tego później. Powinieneś być w stanie załadować oba klucze stylu szpachli do programu szpachli. Jednak formaty klucza prywatnego dla putty i SSH.com nie są takie same, więc musisz utworzyć przekonwertowany plik. Przejdź do menu konwersji i wyeksportuj klucz SSH.com. Zapisz go jako „sshstyle”. Teraz wróć do menu konwersji i wyeksportuj klucz openssh. Zapisz go jako „openssh”. Te nazwy są dowolne i możesz wybrać własne. Będziesz musiał później zmienić nazwy instalacji na komputerze OpenSSH. Patrz poniżej.

Biorąc powyższe pod uwagę, opracowałem następującą metodę puttygen, używając naszej poprzednio wygenerowanej prywatnej / publicznej pary kluczy openssh:

# generate ssh.com private key from private openssh key
$ puttygen newkey -O private-sshcom -o newkey.puttygen-sshcom

# generate ssh.com public key from private openssh key
$ puttygen newkey -O public -o newkey.pub_puttygen-sshcom

# generate openssh public key from private openssh key (for confirmation)
$ puttygen newkey -O public-openssh -o newkey.pub_puttygen-openssh

Komentowanie jest inne, więc nie można po prostu porównać wynikowych plików, więc jeśli spojrzysz na kilka pierwszych wierszy klawiszy, to całkiem niezły wskaźnik, że powyższe polecenia zakończyły się powodzeniem.

Porównanie publicznych kluczy ssh.com:

$ tail -n +3 newkey.pub_e | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

$ tail -n +3 newkey.pub_puttygen-sshcom | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

Porównanie publicznych kluczy openssh:

$ cut -c 1-100 newkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY
slm
źródło
3
a co z konwersją klucza prywatnego ?
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - dlaczego to tak ważne? Próbowałem i wydaje się, że działa na klucze prywatne lub publiczne.
slm
1
Nie wiesz, że zwraca ważnego klucza prywatnego dla mnie $> a="$(ssh-keygen -e -f ~/.ssh/id_rsa)m"; b="$(ssh-keygen -e -f ~/.ssh/id_rsa.pub)m"; md5sum <<< $a; md5sum <<< $b ce615aa3e39e274d0bd81064399cedf8 - ce615aa3e39e274d0bd81064399cedf8 -. Skróty oryginalnych plików są różne, obv. Wygląda na to, że zwraca klucz publiczny dla prywatnego lub publicznego klucza wejściowego.
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - zobacz moje aktualizacje odpowiedzi. Masz rację, że ssh-keygenoddaje klucze publiczne. Opracowałem metodę opartą na dodatkowych badaniach. LMK, jeśli jest to dopuszczalne.
slm
1
atrybuty puttygen mogą być trudne: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Ooznacza typ wyjściowy i plik-o wyjściowy ). To generuje klucze prywatne i publiczne ssh2 z generowanego przez OpenSSH 7.0 klucza prywatnego rsa 2048 bitów. Nie działa na kliencie Win Phone 7.5 (* Klient SSH Tommi Pirttiniemi). Ale dzięki @ ДМИТРИЙМАЛИКОВ i @slm za świetną odpowiedź. @Otheus puttygen pochodzi z Arch. putty
tuk0z
1

ssh-keygennie wyeksportuje klucza prywatnego w formacie pem, ale skonwertuje istniejący klucz prywatny openssh na format pem, zastępując oryginał. Wszystko, co musisz zrobić, to edytować hasło.

Polecenie przekonwertowania ~/.ssh/id_rsapliku z formatu OpenSSH na format SSH2 (pem) to:

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

Następnie w wierszu polecenia podaj (stare) i nowe hasło. Mogą być takie same, a nawet oba mogą być puste. Możesz też podać je w wierszu polecenia, używając opcji -P(stare hasło) i -N(nowe hasło). Na przykład, jeśli hasło jest puste, a chcesz zachować to w ten sposób:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
użytkownik43957
źródło