Convierta la clave privada OpenSSH en clave privada SSH2

29

¿Hay alguna manera de convertir un par de claves OpenSSH existentes al par de claves SSH2 (formato ssh.com)?

UPD : dado que hay algunas respuestas sobre la ssh-keygenaparición repentina, explicaré de dónde vengo (también será una buena respuesta sobre "¿qué has intentado?").

$> 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

En otras palabras, ssh-keygendevuelve las mismas claves para las claves de entrada privadas y públicas (los hash de los archivos originales son obviamente diferentes, los he verificado dos veces para asegurarme de que sean claves privadas y públicas válidas). Parece ser que ssh-keygengenera solo la clave pública para la clave de entrada privada o pública.

¿Lo estoy haciendo mal o es un comportamiento normal?

ДМИТРИЙ МАЛИКОВ
fuente

Respuestas:

43

Este tutorial titulado: SSH: Convierte OpenSSH a SSH2 y viceversa parece ofrecerte lo que estás buscando.

Convierta la clave OpenSSH en clave SSH2

Ejecute la versión OpenSSH de ssh-keygenen su clave pública OpenSSH para convertirla al formato que necesita SSH2 en la máquina remota. Esto debe hacerse en el sistema que ejecuta OpenSSH.

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

Convertir clave SSH2 a clave OpenSSH

Ejecute la versión OpenSSH de ssh-keygenen su clave pública ssh2 para convertirla al formato que necesita OpenSSH. Esto debe hacerse en el sistema que ejecuta OpenSSH.

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

El tutorial continúa para mostrar cómo generar los distintos tipos de claves y cómo exportarlas a otros formatos.

¿Usar esto para claves privadas y públicas?

Según la página del manual, la respuesta sería un sí. Al mirar la página del manual, ssh-keygense indica lo siguiente para el -ecambio:

 -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.

Pero en la práctica parecería que ssh-keygenno puede convertir claves privadas, solo públicas.

Por ejemplo:

# 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

Mirando las claves extraídas resultantes confirma esto:

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

Buscando en Google un poco, me encontré con este anuncio de un artículo titulado: ¿Cómo convertir archivos de clave privada OpenSSH a SSH ? El sitio parecía estar arriba y abajo, pero al buscar en la memoria caché de Google esta página , encontré la siguiente propaganda:

¿Cómo convertir archivos de clave privada OpenSSH a archivos de clave privada SSH.com?

El programa ssh-keygen no puede hacerlo, aunque la mayoría de las páginas man dicen que sí. Lo desalientan para que use múltiples claves públicas. El único problema es que RCF no le permitirá registrar más de una clave pública.

El artículo continúa cubriendo un método para convertir una clave privada openssh en una clave privada ssh.com mediante el uso de la puttygen herramienta PuTTY . NOTA: puttygen se puede ejecutar desde Windows y Linux.

Abra 'puttygen' y genere un par de claves públicas / privadas rsa de 2048 bits. Asegúrese de agregar una contraseña después de que se genera. Guarde la clave pública como "puttystyle.pub" y guarde la clave privada como "puttystyle". El programa de masilla y los programas SSH.com comparten un formato de clave pública común, pero el programa de masilla y OpenSSH tienen diferentes formatos de clave pública. Vamos a volver a esto más adelante. Debería poder cargar ambas claves de masilla en el programa de masilla. Sin embargo, los formatos de clave privada para putty y SSH.com no son los mismos, por lo que deberá crear un archivo convertido. Vaya al menú de conversiones y exporte una clave SSH.com. Guárdelo como "sshstyle". Ahora regrese al menú de conversiones y exporte una tecla openssh. Guárdelo como "openssh". Estos nombres son arbitrarios y puedes elegir el tuyo. Tendrá que cambiar los nombres para la instalación en una máquina OpenSSH, más adelante. Vea abajo.

Dado lo anterior, resolví el siguiente uso puttygen, utilizando nuestro par de claves openssh privado / público previamente generado:

# 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

Los comentarios son diferentes, por lo que no puede simplemente comparar los archivos resultantes, por lo que si observa las primeras líneas de las teclas, es un buen indicador de que los comandos anteriores fueron exitosos.

Comparación de claves públicas 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

Comparación de las claves públicas de openssh:

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

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY
slm
fuente
3
¿Y qué hay de la conversión de clave privada ?
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - ¿por qué eso importaría? Lo intenté y parece funcionar para las claves privadas o públicas.
slm
1
No estoy seguro de que devuelve la clave privada válida para mí: $> 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 -. Los hashes de los archivos originales son diferentes, obviamente. Parece ser que devuelve la clave pública para la clave de entrada privada o pública.
ДМИТРИЙ МАЛИКОВ
@ ДМИТРИЙМАЛИКОВ - ver mis actualizaciones a la respuesta. Tienes razón, eso ssh-keygenes devolver las claves públicas. He elaborado un método basado en investigaciones adicionales. LMK si es aceptable.
slm
1
Los atributos de puttygen pueden ser complicados: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Osignifica tipo de salida y archivo de-o salida ). Eso genera claves públicas y privadas ssh2 a partir de una clave privada rsa de 2048 bits generada por OpenSSH 7.0. No funciona en el cliente Win Phone 7.5 (* El cliente SSH de Tommi Pirttiniemi). Pero gracias a @ ДМИТРИЙМАЛИКОВ y @slm por una excelente respuesta de todos modos. @Otheus puttygen viene con Arch. putty
tuk0z
1

ssh-keygenno exportará una clave privada en formato pem, pero convertirá una clave privada openssh existente al formato pem, sobrescribiendo el original. Todo lo que tienes que hacer es editar la contraseña.

El comando para convertir su ~/.ssh/id_rsaarchivo del formato OpenSSH al formato SSH2 (pem) es:

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

Luego proporcione la frase de contraseña (antigua) y la nueva en el indicador. Pueden ser lo mismo, o incluso ambos estar en blanco. O puede suministrarlos en la línea de comandos usando las opciones -P(frase de contraseña anterior) y -N(frase de contraseña nueva). Por ejemplo, si la frase de contraseña está en blanco y desea mantenerla así:

ssh-keygen -p -P '' -N ''-f ~/.ssh/id_rsa -m pem
user43957
fuente