Jak przekonwertować pary kluczy SSH wygenerowane przy użyciu PuTTYgen (Windows) na pary kluczy używane przez ssh-agent i Keychain (Linux)

464

Wygenerowałem pary kluczy za pomocą PuTTYgen i logowałem się za pomocą Pageant, więc muszę wprowadzać frazę tylko raz podczas uruchamiania systemu.

Jak to osiągnąć w systemie Linux? Słyszałem, keychainale słyszę, że używa innego formatu pary kluczy - nie chcę zmieniać kluczy Windows i byłoby miło, gdybym mógł bezproblemowo łączyć się w ten sam sposób zarówno w systemie Windows, jak i Linux.

TCSGrad
źródło
Nie powinno być żadnych problemów z używaniem kluczy w systemie Linux ... po prostu skopiuj je i dodaj pub do autoryzowanych kluczy ... chociaż oczywiście nie do końca rozumiem twoje pytanie.
Randall Hunt
17
Nie, jest - wiem tyle, że kluczowe formaty używane przez PuttyGen i ssh-agent są różne i należy je jawnie przekonwertować - patrz szczegółowa odpowiedź Kaleba poniżej.
TCSGrad

Odpowiedzi:

714

puttygenobsługuje eksportowanie klucza prywatnego do formatu zgodnego z OpenSSH. Następnie można użyć narzędzi OpenSSH do odtworzenia klucza publicznego.

  1. Otwórz PuttyGen
  2. Kliknij Załaduj
  3. Załaduj swój klucz prywatny
  4. Przejdź do Conversions->Export OpenSSHi wyeksportuj swój klucz prywatny
  5. Skopiuj swój klucz prywatny do ~/.ssh/id_dsa(lub id_rsa).
  6. Utwórz wersję klucza publicznego RFC 4716 za pomocą ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. Konwertuj wersję klucza publicznego RFC 4716 na format OpenSSH:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
    

Zobacz to i to, aby uzyskać więcej informacji.

Kaleb Pederson
źródło
12
Dla tych, którzy dostają It is required that your private key files are NOT accessible by othersbłąd, tak jak ja, cd ~/.sshichmod 700 id_rsa
ekspert
77
Masz na myśli chmod 600 id_rsa . Plik nie powinien być wykonywalny. :)
sig11
2
Ta odpowiedź była kluczem do uzyskania ssh z wiersza poleceń systemu Windows za pomocą kluczy bez hasła dla mnie (szczególnie dla dostępu do git). Oszczędziłbym godziny bólu, gdybym go wcześniej widział! Dzięki!
cori
2
Czy puttygen można wykonać z poziomu CLI?
CMCDragonkai
20
Zakładam, że jest to coś nowego, ale jeśli otworzysz swój klucz prywatny w puttygen, to automatycznie pokaże ci kompatybilny z OpenSSH, kopiowalny ciąg klucza publicznego w interfejsie użytkownika.
UpTheCreek
161

Jeśli masz tylko klucz publiczny od użytkownika w formacie PuTTY, możesz przekonwertować go na standardowy format openssh w następujący sposób:

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Bibliografia

Kopia artykułu

Ciągle o tym zapominam, więc napiszę tutaj. Non-maniacy, po prostu idź dalej.

Najczęstszym sposobem na utworzenie klucza w systemie Windows jest użycie Putty / Puttygen. Puttygen zapewnia porządne narzędzie do konwersji klucza prywatnego linux na format Putty. Jednak to, czego nie rozwiązano, to to, że kiedy zapiszesz klucz publiczny za pomocą puttygen, nie będzie działać na serwerze z linuksem. Windows umieszcza niektóre dane w różnych obszarach i dodaje podział wierszy.

Rozwiązanie: Po przejściu do ekranu klucza publicznego podczas tworzenia pary kluczy w puttygen, skopiuj klucz publiczny i wklej go do pliku tekstowego z rozszerzeniem .pub. Zaoszczędzisz sysadmin godzin frustracji podczas czytania takich postów.

JEDNAK, sysadmins, niezmiennie otrzymujesz plik klucza z charakterem, który nie zgłasza komunikatu o błędzie w dzienniku uwierzytelniania, z wyjątkiem, że nie znaleziono klucza, próba hasła; mimo że klucze wszystkich innych działają dobrze, a ten klucz został wysłany do użytkownika 15 razy.

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

Powinien przekonwertować istniejący klucz publiczny puttygen do formatu OpenSSH.

bukzor
źródło
2
Możesz także skopiować komentarz użytkownika z Comment:wiersza i wkleić go w tym samym wierszu co nowy klucz, oddzielony spacją. Nie wiem, dlaczego ssh-keygen nie robi tego domyślnie.
Tobia,
2
To daje mi błąd:decode blob failed: invalid format
Chris Stryczyński
Jeśli czytasz oryginalny artykuł, kluczowym szczegółem jest to, że to podejście działa tylko wtedy, gdy skopiujesz klucz z puttygen podczas przechodzenia przez jego interfejs użytkownika, nie przekształci on już wygenerowanego klucza z plików wyprodukowanych przez puttygen.
slm
Czy mogę użyć tego samego narzędzia do konwersji w inny sposób?
Olle Härstedt,
tak, wygląda na to, że patrzysz: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik
148

Nowsze wersje PuTTYgen (moja to 0.64) są w stanie pokazać klucz publiczny OpenSSH do wklejenia w systemie Linux w .ssh/authorized_keyspliku, jak pokazano na poniższym obrazku:

wprowadź opis zdjęcia tutaj

Zac
źródło
7
Ta odpowiedź obejmuje konfigurację uwierzytelniania klucza na pilocie korzystającym z formatu OpenSSH. Ale aby użyć klucza wygenerowanego przez Putty na kliencie Linux , ta odpowiedź jest niewystarczająca. Postępowałem zgodnie z przyjętą odpowiedzią, która zadziałała doskonale.
wberry
52

Alternatywnie, jeśli chcesz pobrać klucze prywatne i publiczne z pliku kluczy sformatowanego PuTTY, możesz użyć puttygenw systemach * nix. W przypadku większości systemów opartych na apt puttygenjest częścią putty-toolspakietu.

Wyprowadzanie klucza prywatnego z pliku kluczy sformatowanego PuTTY:

$ puttygen keyfile.pem -O private-openssh -o avdev.pvk

W przypadku klucza publicznego:

$ puttygen keyfile.pem -L

John Jawed
źródło
Jeśli z jakiegoś powodu MUSISZ to zrobić na komputerze z systemem Windows (nie można bezpiecznie przenieść wszystkich kluczy do * nix) i mieć tak wiele kluczy za pomocą GUI jest uciążliwe, spróbuj skompilować źródło Unixa pod Cygwin. Ten puttygen.exe da ci CLI „tryb wsadowy”, jak opisano powyżej.
Toddius Zho
2
OSX:brew install putty
Juha Palomäki,
1
To powinno zostać odwrócone: puttygen inppk -O private-openssh -o outpemi puttygen inppk -L(lub ssh-keygen -y -f outpem)
dave_thompson_085
27
sudo apt-get install putty

Spowoduje to automatyczne zainstalowanie narzędzia puttygen.

Teraz, aby przekonwertować plik PPK do użycia z poleceniem SSH, wykonaj następujące czynności w terminalu

puttygen mykey.ppk -O private-openssh -o my-openssh-key

Następnie możesz połączyć się przez SSH za pomocą:

ssh -v [email protected] -i my-openssh-key

http://www.graphicmist.in/use-your-putty-ppk-file-to-ssh-remote-server-in-ubuntu/#comment-28603

Purnendu Singh
źródło
To tak naprawdę nie pokazuje więcej niż to, co już jest w odpowiedzi @John Jawed
Martin Prikryl
Argumenty wyjaśniają, co reprezentują. +1
danronmoon
ŚWIETNY! To działa. Ponadto, aby zainstalować kit na Macach: naparuj kit instalacyjny
Dylan B
14

Ostatnio miałem ten problem, kiedy przechodziłem z Putty dla Linuxa do Remmina dla Linuxa. Mam więc wiele plików PPK dla Putty w moim .puttykatalogu, ponieważ używam go od 8 lat. W tym celu użyłem prostego forpolecenia powłoki bash, aby wykonać wszystkie pliki:

cd ~/.putty
for X in *.ppk; do puttygen $X -L > ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pub; puttygen $X -O private-openssh -o ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pvk; done;

Bardzo szybko i do rzeczy, wykonałem zadanie dla wszystkich plików, które miał kit. Jeśli znajdzie klucz z hasłem, zatrzyma się i najpierw poprosi o hasło do tego klucza, a następnie kontynuuje.

jfreak53
źródło
2
Dla leniwych ppl takich jak ja, oto kopiuj-wklej, aby uzyskać puttygen na ubuntu: sudo apt-get install putty-tools
Lennart Rolland
„proste” - nie chciałbym, aby było skomplikowane!
Alex Jansen
8

Prawdopodobnie łatwiej jest utworzyć klucze w systemie Linux i użyć PuTTYgen do konwersji kluczy do formatu PuTTY.

PYTTY Faq: A.2.2

Bradley Kreider
źródło
14
Niestety nie jest to opcja, jeśli masz istniejące klucze, których musisz użyć.
ekspert
6

Myślę, że TCSgrad próbował (kilka lat temu) zapytać, jak sprawić, by Linux zachowywał się tak, jak robi to jego maszyna z systemem Windows. Oznacza to, że istnieje agent (pageant), który przechowuje odszyfrowaną kopię klucza prywatnego, dzięki czemu hasło należy wprowadzić tylko raz. Następnie klient ssh, putty, może zalogować się na komputerach, na których jego klucz publiczny jest wymieniony jako „autoryzowany” bez pytania o hasło.

Analogią tego jest to, że Linux działa jako klient sshAnalogią , ma agenta przechowującego odszyfrowany klucz prywatny, tak więc gdy TCSgrad wpisze „host ssh”, polecenie ssh otrzyma swój klucz prywatny i odejdzie bez pytania o hasło. host musiałby oczywiście trzymać klucz publiczny w ~ / .ssh / author_keys.

Linuksowy analog do tego scenariusza jest realizowany przy użyciu ssh-agent (analog pageant) i ssh-add (analog do dodawania klucza prywatnego do pageant).

Metodą, która działała dla mnie, było użycie: $ ssh-agent $ SHELL Ten $ SHELL był magiczną sztuczką, której potrzebowałem, aby agent działał i pozostał uruchomiony. Znalazłem to gdzieś w sieci i zakończyło się to kilka godzin bicia głową o ścianę.

Teraz mamy analogię do korowodu, agenta bez załadowanych kluczy.

Samo wpisanie $ ssh-add doda (domyślnie) klucze prywatne wymienione w domyślnych plikach tożsamości w ~ / .ssh.

Artykuł w sieci z wieloma szczegółami można znaleźć tutaj

kovacsbv
źródło
0

PPK → OpenSSH RSA z PuttyGen & Docker.

Prywatny klucz:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -O private-openssh -o my-openssh-key

Klucz publiczny:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -L -o my-openssh-key.pub

Zobacz też https://hub.docker.com/r/zinuzoid/puttygen

Uriy MerkUriy
źródło