¿Cómo recupero la clave pública de una clave privada SSH?

444

Una clave privada SSH generada por ssh-keygencontiene una parte de clave pública. ¿Cómo recupero esta clave pública de la clave privada? Perdí mi clave pública y necesito poner el contenido de esta clave pública en el authorized_keysarchivo de servidores y no quiero crear un nuevo par de claves.

Alternativamente redactado: ¿cómo creo el id_rsa.pubarchivo a partir de un id_rsaarchivo?

Lekensteyn
fuente
pbcopy > ~/.ssh/id_rsa.pub¡Uy!
Nick T
@NickT: pbcopy es un comando de MacOSX. Además, es inútil si ha reiniciado, desconectado o copiado cualquier otra cosa en el portapapeles.
jsnfwlr

Respuestas:

681

He encontrado la respuesta en Error del servidor: ¿ Crear una clave SSH pública a partir de la clave privada?

La opción -ygenera la clave pública:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Como nota al margen, se pierde el comentario de la clave pública. He tenido un sitio que requería el comentario (¿Launchpad?), Por lo que debe editar ~/.ssh/id_rsa.puby agregar un comentario a la primera línea con un espacio entre el comentario y los datos clave. A continuación se muestra un ejemplo de clave pública truncada.

ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu

Para las claves que se agregaron al Agente SSH (un programa que se ejecuta en segundo plano y evita la necesidad de volver a ingresar la frase de contraseña del archivo de claves una y otra vez), puede usar el ssh-add -Lcomando para enumerar las claves públicas de las claves que se agregaron a El agente (vía ssh-add -l). Esto es útil cuando la clave SSH se almacena en una tarjeta inteligente (y no es posible acceder al archivo de clave privada).

Lekensteyn
fuente
1
Tenga en cuenta que su archivo de clave privada ~/.ssh/id_rsadebe estar restringido a su nombre de usuario. use $ sudo chmod 600 ~/.ssh/id_rsae ingrese sus credenciales raíz para restringirlo, luego puede generar el archivo de clave pública. De lo contrario, recibirá una advertencia de archivo de clave privada sin restricciones.
Mark Mikofski el
12
@ MarkMikofski No es necesario sudo, se supone que ya tienes la clave privada. De lo contrario, no puede leerlo en primer lugar.
Lekensteyn
77
@Lekensteyn gracias, ¡por supuesto que tienes razón! También 400se recomienda ya que no es necesario escribir para escribir el archivo de clave privada. El comando corregido debe ser$ chmod 400 ~/.ssh/id_rsa
Mark Mikofski, el
Se pierde el comentario de clave privada. Ver stackoverflow.com/questions/38290929/…
weberjn
1
@weberjn La clave privada ( id_rsaarchivo) no tiene un comentario, pero de hecho el comentario dentro del archivo de clave pública ( id_rsa.pub) se pierde.
Lekensteyn
14

Esta es una solución específica para usuarios que usan Windows para SSH en sus máquinas remotas, incluidas imágenes en la nube en Amazon AWS y GCE.

(Descargo de responsabilidad)

Recientemente utilicé esta solución para iniciar sesión de forma remota en nuevas imágenes de VM implementadas en GCE.


Herramientas utilizadas:

  1. puttygen
  2. WinSCP

Pasos a realizar:

  1. Genere un par de claves pública / privada usando puttygen.
  2. Cargue una clave pública en su servidor en la nube o en una ubicación remota.

Descripción (cómo hacerlo):

  1. Genere una clave / par o use una clave privada existente:

    Si tienes una clave privada:

    Abra puttygen, presione el botón de carga y seleccione su archivo de clave privada (* .pem).

    Si no tiene una clave privada:

    • Puttygen abierto,
    • Seleccione el tipo de clave SSH2 DSA deseado (puede usar RSA o DSA) dentro de la sección Parámetros ... y es importante que deje el campo de frase de contraseña en blanco,
    • Presione generar y siga las instrucciones para generar un par de claves (públicas / privadas).

    Foto de ejemplo de generación de claves

  2. Cree un nuevo archivo 'autorizado_keys' (con el Bloc de notas):

    Copie sus datos de clave pública de la sección "Clave pública para pegar en el archivo OpenSSH Authorized Keys" del generador de claves PuTTY, y pegue los datos clave en el archivo "Authorized Keys".

    Asegúrese de que solo haya una línea de texto en este archivo.

  3. Suba la clave a un servidor Linux:

    • Abra WinSCP
    • Seleccione el protocolo de archivo SFTP e inicie sesión con sus credenciales SSH.
    • Si tiene éxito, verá la estructura del directorio de inicio en su máquina remota.

    Cargue el archivo Authorized_keys al directorio de inicio en la máquina remota.

  4. Establecer permisos adecuados:

    Hacer un .sshdirectorio (si no existe)

    Copie el authorized_keysarchivo en el directorio .ssh (esto reemplazará cualquier authorized_keysarchivo existente ; tome nota de esto).

    Si el archivo existe, simplemente agregue el contenido de este archivo al archivo existente.

    Ejecute comandos para establecer permisos:

    sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
    

Ahora podrá ingresar a una máquina remota sin ingresar credenciales cada vez.

Otras lecturas:

  1. Generando y cargando claves SSH en Windows

  2. Autenticación sin contraseña utilizando OpenSSH Key, certificados .pem y .pub

devprashant
fuente
Si su directorio de inicio está encriptado, haga esto: askubuntu.com/questions/439184/…
devprashant
2
Aunque su respuesta no es realmente relevante para la pregunta, la voto por su entusiasmo.
Truong Nguyen