Come convertire le coppie di chiavi SSH generate usando PuTTYgen (Windows) in coppie di chiavi usate da ssh-agent e Keychain (Linux)


464

Ho generato coppie di chiavi usando PuTTYgen e ho effettuato l'accesso usando Pageant, quindi devo inserire la mia password solo una volta quando il mio sistema si avvia.

Come ottengo questo in Linux? Ne ho sentito parlare keychainma sento che usa un diverso formato di coppia di chiavi: non voglio cambiare i miei tasti di Windows e sarebbe bello se potessi collegarmi senza problemi allo stesso modo sia in Windows che in Linux.


Non ci dovrebbero essere problemi nell'usare le chiavi anche in Linux ... basta copiarle e aggiungere il pub alle chiavi autorizzate ... anche se è vero che non capisco del tutto la tua domanda.
Randall Hunt,

17
No, c'è - lo so così tanto che i formati chiave usati da PuttyGen e ssh-agent sono diversi e devono essere convertiti esplicitamente - vedi la risposta dettagliata di Kaleb di seguito.
TCSGrad

Risposte:


714

puttygensupporta l'esportazione della chiave privata in un formato compatibile OpenSSH. È quindi possibile utilizzare gli strumenti OpenSSH per ricreare la chiave pubblica.

  1. Apri PuttyGen
  2. Fai clic su Carica
  3. Carica la tua chiave privata
  4. Vai a Conversions->Export OpenSSHed esporta la tua chiave privata
  5. Copia la tua chiave privata in ~/.ssh/id_dsa(o id_rsa).
  6. Creare la versione RFC 4716 della chiave pubblica usando ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. Convertire la versione RFC 4716 della chiave pubblica nel formato OpenSSH:

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

Vedi questo e questo per maggiori informazioni.


12
Per coloro che ottengono It is required that your private key files are NOT accessible by otherserrori come se avessi corso cd ~/.sshechmod 700 id_rsa
esperto

77
Intendi chmod 600 id_rsa . Non è necessario che il file sia eseguibile. :)
sig11

2
Questa risposta è stata la chiave per ottenere ssh dalla riga di comando di Windows usando chiavi senza password per me (in particolare per l'accesso git). Mi avrebbe risparmiato ore di dolore se l'avessi visto prima! Grazie!
Cori,

2
Puttygen può essere eseguito dalla CLI?
CMCDragonkai,

20
Presumo che si tratti di qualcosa di nuovo, ma se apri la tua chiave privata in puttygen, ti mostrerà automaticamente una stringa di chiave pubblica, copiabile e compatibile con OpenSSH nell'interfaccia utente.
UpTheCreek

161

Se tutto ciò che hai è una chiave pubblica di un utente in formato PuTTY, puoi convertirla nel formato standard openssh in questo modo:

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

Riferimenti

Copia dell'articolo

Continuo a dimenticarlo, quindi lo scrivo qui. Non geek, continuate a camminare.

Il modo più comune per creare una chiave su Windows è usare Putty / Puttygen. Puttygen fornisce un'utilità pulita per convertire una chiave privata di Linux in formato Putty. Tuttavia, ciò che non viene risolto è che quando si salva la chiave pubblica usando puttygen non funzionerà su un server Linux. Windows inserisce alcuni dati in diverse aree e aggiunge interruzioni di riga.

La soluzione: quando si arriva alla schermata della chiave pubblica nella creazione della coppia di chiavi in ​​puttygen, copiare la chiave pubblica e incollarla in un file di testo con estensione .pub. Ti risparmierai ore di frustrazione per leggere messaggi come questo.

TUTTAVIA, amministratori di sistema, invariabilmente si ottiene il file chiave traballante che non genera alcun messaggio di errore nel registro di autenticazione tranne, nessuna chiave trovata, che prova la password; anche se le chiavi di tutti gli altri funzionano correttamente e tu hai inviato questa chiave all'utente 15 volte.

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

Dovrebbe convertire una chiave pubblica puttygen esistente in formato OpenSSH.


2
Inoltre, potresti voler copiare il commento dell'utente dalla Comment:riga e incollarlo sulla stessa riga della nuova chiave, separato da uno spazio. Non so perché ssh-keygen non lo farà di default.
Tobia,

2
Questo mi dà un errore di:decode blob failed: invalid format
Chris Stryczynski,

Se leggi l'articolo originale, il dettaglio chiave è che questo approccio funziona solo se copi la chiave da puttygen durante la sua interfaccia utente, non convertirà una chiave già generata dai file prodotti da puttygen.
slm,

Posso usare lo stesso strumento per convertirlo in altro modo?
Olle Härstedt,

sì, sembra che tu stia guardando: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik

148

Le versioni più recenti di PuTTYgen (la mia è 0.64) sono in grado di mostrare la chiave pubblica OpenSSH da incollare nel sistema Linux nel .ssh/authorized_keysfile, come mostrato nella seguente immagine:

inserisci qui la descrizione dell'immagine


7
Questa risposta spiega come impostare l'autenticazione con chiave su un telecomando che utilizza il formato OpenSSH. Ma per usare una chiave generata da Putty su un client Linux , questa risposta è insufficiente. Ho seguito la risposta accettata e ha funzionato magnificamente.
wberry,

52

In alternativa, se si desidera acquisire le chiavi private e pubbliche da un file di chiavi formattato PuTTY, è possibile utilizzare puttygensu sistemi * nix. Per la maggior puttygenparte dei sistemi basati su apt fa parte del putty-toolspacchetto.

Emissione di una chiave privata da un file di chiavi formattato PuTTY:

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

Per la chiave pubblica:

$ puttygen keyfile.pem -L


Se per qualche motivo DEVI farlo su una finestra di Windows (non è possibile trasferire in modo sicuro tutte le chiavi su un * nix) e avere così tante chiavi usando la GUI è ingombrante, prova a compilare la fonte Unix sotto Cygwin. Quel puttygen.exe ti darà la "modalità batch" della CLI come descritto sopra.
Toddius Zho,

2
OSX:brew install putty
Juha Palomäki il

1
Questo dovrebbe essere invertito: puttygen inppk -O private-openssh -o outpeme puttygen inppk -L(o ssh-keygen -y -f outpem)
dave_thompson_085 il

27
sudo apt-get install putty

Ciò installerà automaticamente lo strumento puttygen.

Ora per convertire il file PPK da utilizzare con il comando SSH, eseguire quanto segue nel terminale

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

Quindi, è possibile connettersi tramite SSH con:

ssh -v user@example.com -i my-openssh-key

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


Questo non mostra molto di più di ciò che è già nella risposta di @John Jawed
Martin Prikryl

Gli argomenti spiegano cosa rappresentano. +1
danronmoon,

GRANDE! Questo funziona Inoltre, per installare lo stucco su Mac: brew install putty
Dylan B

14

Di recente ho avuto questo problema mentre mi trasferivo da Putty per Linux a Remmina per Linux. Quindi ho molti file PPK per Putty nella mia .puttydirectory poiché lo uso da 8 anni. Per questo ho usato un semplice forcomando per bash shell per fare tutti i file:

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;

Molto veloce e al punto, ha fatto il lavoro per tutti i file che aveva Putty. Se trova una chiave con una password, si fermerà e chiederà prima la password per quella chiave e poi continuerà.


2
Per i pigri ppl come me, ecco copia-incolla per ottenere puttygen su Ubuntu: sudo apt-get install putty-tools
Lennart Rolland,

"semplice" - odio vedere complicato!
Alex Jansen,

8

Probabilmente è più facile creare le tue chiavi su Linux e usare PuTTYgen per convertire le chiavi in ​​formato PuTTY.

FaTTY Faq: A.2.2


14
Sfortunatamente non è un'opzione se hai chiavi esistenti che devi usare.
esperto

6

Penso che quello che TCSgrad stava cercando di chiedere (qualche anno fa) era come far comportare Linux come fa la sua macchina Windows. Cioè, esiste un agente (concorso) che contiene una copia decrittata di una chiave privata in modo che la passphrase debba essere inserita una sola volta. Quindi, il client ssh, putty, può accedere alle macchine in cui la sua chiave pubblica è elencata come "autorizzata" senza una richiesta di password.

L'analogo per questo è che Linux, che funge da client ssh , ha un agente in possesso di una chiave privata decifrata in modo che quando TCSgrad digita "host ssh" il comando ssh otterrà la sua chiave privata e andrà senza che venga richiesta una password. l'host, ovviamente, dovrebbe contenere la chiave pubblica in ~ / .ssh / authorized_keys.

L'analogo Linux a questo scenario è realizzato usando ssh-agent (l'analogo del concorso) e ssh-add (l'analogo all'aggiunta di una chiave privata al concorso).

Il metodo che ha funzionato per me era usare: $ ssh-agent $ SHELL Quella $ SHELL era il trucco magico di cui avevo bisogno per far funzionare l'agente e continuare a correre. L'ho trovato da qualche parte sulla rete e sono finite alcune ore a sbattere la testa contro il muro.

Ora abbiamo l'analogo del concorso in esecuzione, un agente senza chiavi caricate.

Digitando $ ssh-add da solo si aggiungeranno (per impostazione predefinita) le chiavi private elencate nei file di identità predefiniti in ~ / .ssh.

Un articolo web con molti più dettagli può essere trovato qui


0

PPK → OpenSSH RSA con PuttyGen e Docker.

Chiave privata:

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

Chiave pubblica:

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

Vedi anche https://hub.docker.com/r/zinuzoid/puttygen

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.