¿Cómo agrego una contraseña a una clave privada de OpenSSH que se generó sin una contraseña?

213

Generé una clave privada OpenSSH usando puttygen (y la exporté en formato OpenSSH). ¿Cómo puedo poner una contraseña en esta clave existente (sé cómo generar una nueva clave con una contraseña)?

Conrad
fuente
13
Si ve este comentario, marque una de las respuestas como aceptada o escriba un comentario diciendo lo que se perdió. ¡Gracias!
Benjamin Atkin
1
Agregar es lo mismo que cambiar o eliminar: stackoverflow.com/questions/112396/… , posible lo mismo para el cambio: serverfault.com/questions/50775/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Si obtiene Bad passphraseuna id_ed25519clave pero la contraseña es correcta, probablemente esté utilizando un nivel inferior ssh-keygenpara administrarla.
jww

Respuestas:

350

Prueba el comando ssh-keygen -p -f keyfile

Desde la página de manual de ssh-keygen

 -p      Requests changing the passphrase of a private key file instead of
         creating a new private key.  The program will prompt for the file
         containing the private key, for the old passphrase, and twice for
         the new passphrase.

 -f filename
         Specifies the filename of the key file.

Ejemplo:

ssh-keygen -p -f ~/.ssh/id_rsa
sigjuice
fuente
55
Para aquellos que quieran saber qué es -f: especifica el archivo de entrada.
Neikos
44
//, @sigjuice, ¿podrías publicar un ejemplo, como $ ssh-keygen -p -f /Users/sigjuice/.ssh/id_rsa? Esto podría ayudar a las personas que no saben diferenciar entre una clave pública y una privada, y ayudarles a mojarse más rápido.
Nathan Basanese
Por alguna razón, en MacOS 10.14, esto no formatea el archivo con el Proc-Type: 4,ENCRYPTEDencabezado, lo cual es incompatible con algunas aplicaciones que buscan una frase de contraseña. Después de probar varias formas de hacerlo funcionar, la forma más fácil de solucionarlo era hacer lo mismo dentro de un contenedor Docker que ejecuta Ubuntu y luego copiar la clave de nuevo a mi Mac.
ryanbrainard
38

Use la opción -p para ssh-keygen. Esto le permite cambiar la contraseña en lugar de generar una nueva clave.

Cambie la contraseña como muestra sigjuice:

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

La contraseña requerida será la nueva contraseña. (Esto supone que ha agregado la clave pública ~/.ssh/id_rsa.puba sus archivos autorizado_claves). Pruebe con ssh:

ssh -i ~/.ssh/id_rsa localhost

Puede tener varias claves con diferentes nombres para diferentes usos.

BillThor
fuente
//, ¿Podría mostrar un ejemplo y cómo verificar que la opción haya funcionado, @BillThor?
Nathan Basanese
No entiendo. La frase de contraseña está configurada, veo cuando intento cambiarla nuevamente. Pero cuando intento iniciar sesión en el servidor remoto, no solicita esta contraseña de contraseña, ¿por qué?
Luka
1
Está bien. Pregunta una vez por sesión :) No lo sabía.
Luka
¿Esto significa que tiene que cerrar sesión y volver a iniciarla? Cerrar la ventana de terminal y volver a abrirlo no me funciona.
Simon H
Puede escribir ssh-add -Dpara eliminar su identidad en caché. Luego, intente conectarse nuevamente y le pedirá su contraseña. Use ssh-add -lpara ver una lista de sus identidades almacenadas en caché.
Scott Nedderman el
3

También puedes usar openssl:

openssl rsa -aes256 -in ~/.ssh/your_key -out ~/.ssh/your_key.enc
mv ~/.ssh/your_key.enc ~/.ssh/your_key
chmod 600 ~/.ssh/your_key

ver: https://security.stackexchange.com/a/59164/194668

sharez
fuente
Creo que tomaré el camino ssh-keygen ;)
Michael P. Bazos
Gracias por proporcionar una alternativa openssl para hacer la tarea.
Nadjib Mami