Cómo convertir pares de claves SSH generados usando PuTTYgen (Windows) en pares de claves utilizados por ssh-agent y Keychain (Linux)

464

He generado pares de claves usando PuTTYgen y he estado iniciando sesión usando Pageant, por lo que tengo que ingresar mi frase de contraseña solo una vez cuando mi sistema se inicia.

¿Cómo logro esto en Linux? He oído hablar de keychaineso, pero escuché que usa un formato de par de claves diferente: no quiero cambiar mis claves de Windows y sería bueno si pudiera conectarme sin problemas de la misma manera tanto en Windows como en Linux.

TCSGrad
fuente
No debería haber ningún problema al usar las claves en Linux también ... simplemente cópielas y agregue el pub a las claves autorizadas ... aunque es cierto que no entiendo completamente su pregunta.
Randall Hunt
17
No, lo sé: sé tanto que los formatos clave utilizados por PuttyGen y ssh-agent son diferentes, y tienen que convertirse explícitamente. Consulte la respuesta detallada de Kaleb a continuación.
TCSGrad

Respuestas:

714

puttygenadmite la exportación de su clave privada a un formato compatible con OpenSSH. Luego puede usar las herramientas OpenSSH para recrear la clave pública.

  1. Open PuttyGen
  2. Haga clic en cargar
  3. Cargue su clave privada
  4. Ve Conversions->Export OpenSSHy exporta tu clave privada
  5. Copie su clave privada a ~/.ssh/id_dsa(o id_rsa).
  6. Cree la versión RFC 4716 de la clave pública utilizando ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. Convierta la versión RFC 4716 de la clave pública al formato OpenSSH:

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

Vea esto y esto para más información.

Kaleb Pederson
fuente
12
Para aquellos que reciben It is required that your private key files are NOT accessible by otherserror como me había quedado cd ~/.sshychmod 700 id_rsa
experto
77
Te refieres a chmod 600 id_rsa . El archivo no debería necesitar ser ejecutable. :)
sig11
2
Esta respuesta fue la clave para obtener ssh desde la línea de comandos de Windows usando claves sin contraseña para mí (específicamente para el acceso git). ¡Me habría ahorrado horas de dolor si lo hubiera visto antes! ¡Gracias!
cori
2
¿Se puede ejecutar puttygen desde la CLI?
CMCDragonkai
20
Supongo que esto es algo nuevo, pero si abre su clave privada en puttygen, le mostrará automáticamente una cadena de clave pública compatible con OpenSSH en la interfaz de usuario.
UpTheCreek
161

Si todo lo que tiene es una clave pública de un usuario en formato de estilo PuTTY, puede convertirla al formato estándar openssh de la siguiente manera:

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

Referencias

Copia del articulo

Sigo olvidando esto, así que lo escribiré aquí. No geeks, solo sigue caminando.

La forma más común de crear una clave en Windows es usar Putty / Puttygen. Puttygen proporciona una utilidad ordenada para convertir una clave privada de Linux al formato Putty. Sin embargo, lo que no se aborda es que cuando guarde la clave pública utilizando puttygen, no funcionará en un servidor Linux. Windows coloca algunos datos en diferentes áreas y agrega saltos de línea.

La solución: Cuando llegue a la pantalla de clave pública al crear su par de claves en puttygen, copie la clave pública y péguela en un archivo de texto con la extensión .pub. Le ahorrará horas de frustración al administrador del sistema al leer publicaciones como esta.

SIN EMBARGO, sysadmins, invariablemente obtienes el archivo de clave inestable que no arroja ningún mensaje de error en el registro de autenticación, excepto que no se encuentra ninguna clave, prueba la contraseña; a pesar de que las claves de todos los demás funcionan bien, y ha enviado esta clave al usuario 15 veces.

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

Debería convertir una clave pública puttygen existente al formato OpenSSH.

bukzor
fuente
2
Además, es posible que desee copiar el comentario del usuario de la Comment:línea y pegarlo en la misma línea que la nueva clave, separada por un espacio. No sé por qué ssh-keygen no hará esto por defecto.
Tobia
2
Esto me da un error de:decode blob failed: invalid format
Chris Stryczynski
Si lee el artículo original, el detalle clave es que este enfoque solo funciona si copia la clave de puttygen al pasar por su interfaz de usuario, no convertirá una clave ya generada de los archivos producidos por puttygen.
slm
¿Puedo usar la misma herramienta para convertirla de la otra manera?
Olle Härstedt
sí, parece que estás viendo: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik
148

Las versiones más recientes de PuTTYgen (la mía es 0.64) pueden mostrar la clave pública de OpenSSH para pegarla en el sistema Linux en el .ssh/authorized_keysarchivo, como se muestra en la siguiente imagen:

ingrese la descripción de la imagen aquí

Zac
fuente
77
Esta respuesta cubre cómo configurar la autenticación de clave en un control remoto que utiliza el formato OpenSSH. Pero para usar una clave generada por Putty en un cliente Linux , esta respuesta es insuficiente. Seguí la respuesta aceptada y funcionó espléndidamente.
Wberry
52

Alternativamente, si desea obtener las claves privadas y públicas de un archivo de clave con formato PuTTY, puede utilizarlo puttygenen los sistemas * nix. Para la mayoría de los sistemas basados ​​en apt puttygenes parte del putty-toolspaquete.

Salida de una clave privada desde un archivo de clave con formato PuTTY:

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

Para la clave pública:

$ puttygen keyfile.pem -L

John Jawed
fuente
Si por alguna razón DEBE hacerlo en un cuadro de Windows (no puede transferir de forma segura todas las claves a a * nix) y tener tantas claves usando la GUI es engorroso, intente compilar la fuente de Unix en Cygwin. Ese puttygen.exe le dará el "modo por lotes" CLI como se describe anteriormente.
Toddius Zho
2
OSX:brew install putty
Juha Palomäki el
1
Eso debería revertirse: puttygen inppk -O private-openssh -o outpemy puttygen inppk -L(o ssh-keygen -y -f outpem)
dave_thompson_085
27
sudo apt-get install putty

Esto instalará automáticamente la herramienta puttygen.

Ahora para convertir el archivo PPK que se utilizará con el comando SSH, ejecute lo siguiente en la terminal

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

Luego, puede conectarse a través de SSH con:

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
fuente
Esto realmente no muestra más de lo que ya está en la respuesta de @John Jawed
Martin Prikryl
Los argumentos explican lo que representan. +1
danronmoon
¡ESTUPENDO! Esto funciona. Además, para instalar masilla en Macos: brew install putty
Dylan B
14

Recientemente tuve este problema cuando me mudé de Putty para Linux a Remmina para Linux. Así que tengo muchos archivos PPK para Putty en mi .puttydirectorio, ya que lo he estado usando durante 8 años. Para esto utilicé un forcomando simple para bash shell para hacer todos los archivos:

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;

Muy rápido y al grano, hizo el trabajo para todos los archivos que tenía la masilla. Si encuentra una clave con una contraseña, se detendrá y pedirá primero la contraseña para esa clave y luego continuará.

jfreak53
fuente
2
Para personas perezosas como yo, aquí hay copiar y pegar para obtener puttygen en ubuntu: sudo apt-get install putty-tools
Lennart Rolland
"simple" - ¡Odiaría verlo complicado!
Alex Jansen
8

Probablemente sea más fácil crear sus claves en Linux y usar PuTTYgen para convertir las claves al formato PuTTY.

PuTTY Faq: A.2.2

Bradley Kreider
fuente
14
Desafortunadamente, no es una opción si tiene claves existentes que tiene que usar.
experto
6

Creo que lo que TCSgrad intentaba preguntar (hace unos años) era cómo hacer que Linux se comportara como lo hace su máquina Windows. Es decir, hay un agente (concurso) que contiene una copia descifrada de una clave privada, por lo que la frase de contraseña solo debe ingresarse una vez. Luego, el cliente ssh, putty, puede iniciar sesión en máquinas donde su clave pública aparece como "autorizada" sin una solicitud de contraseña.

El análogo para esto es que Linux, actuando como un cliente ssh , tiene un agente que posee una clave privada descifrada, de modo que cuando TCSgrad escribe "host ssh", el comando ssh obtendrá su clave privada e irá sin que se le solicite una contraseña. host, por supuesto, tendría que mantener la clave pública en ~ / .ssh / Authorizedkeys.

El análogo de Linux para este escenario se logra utilizando ssh-agent (el análogo del concurso) y ssh-add (el análogo para agregar una clave privada al concurso).

El método que funcionó para mí fue usar: $ ssh-agent $ SHELL Ese $ SHELL fue el truco de magia que necesitaba para que el agente corriera y siguiera corriendo. Encontré eso en algún lugar de la red y terminó unas horas golpeándome la cabeza contra la pared.

Ahora tenemos el análogo de concurso en ejecución, un agente sin claves cargadas.

Si escribe $ ssh-add por sí mismo, se agregarán (de manera predeterminada) las claves privadas enumeradas en los archivos de identidad predeterminados en ~ / .ssh.

Puede encontrar un artículo web con muchos más detalles aquí.

kovacsbv
fuente
0

PPK → OpenSSH RSA con PuttyGen y Docker.

Llave privada:

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

Llave pública:

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

Ver también https://hub.docker.com/r/zinuzoid/puttygen

Uriy MerkUriy
fuente