¿Cómo elimino la frase de contraseña para la clave SSH sin tener que crear una nueva clave?

1034

Establecí una frase de contraseña al crear una nueva clave SSH en mi computadora portátil. Pero, como me doy cuenta ahora, esto es bastante doloroso cuando intenta comprometerse ( Git y SVN ) a una ubicación remota a través de SSH muchas veces en una hora.

Una forma de pensar es eliminar mis claves SSH y crear nuevas. ¿Hay alguna forma de eliminar la frase de contraseña, manteniendo las mismas claves?

btbytes
fuente
99
Creo que la respuesta estricta es en realidad la respuesta de Torsten Marek. El truco ssh-agent puede ser lo que estás buscando, pero es una respuesta a una pregunta diferente.
tardate
1
La frase de contraseña no es solo una clave para desbloquear la clave SSH privada, sino una parte del mecanismo de cifrado. Una parte es su clave SSH, otra: la frase de contraseña ingresada manualmente. Solo si ambas partes son correctas, la clave compuesta generada a partir de ellas sobre la marcha será válida. Entonces, otra frase de contraseña corresponde a otra clave SSH (y ninguna frase de contraseña es un caso especial de "otra frase de contraseña").
Paul
97
Cerrar tales preguntas es como debatir si los efectos secundarios en los lenguajes de programación deberían permitirse porque son "puros" o no. Los puristas siempre se vuelven locos, mientras que a los demás no les importa porque es una característica útil y hace la vida más fácil. Se necesita ssh, incluso si no está estrictamente relacionado con la programación ... no cierre tales preguntas. : |
sjas

Respuestas:

1933

Respuesta corta:

$ ssh-keygen -p

Esto le pedirá que ingrese la ubicación del archivo de claves, la frase de contraseña anterior y la frase de contraseña nueva (que puede dejarse en blanco para que no tenga frase de contraseña).


Si desea hacerlo todo en una línea sin indicaciones, haga lo siguiente:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Importante: Tenga en cuenta que al ejecutar comandos, generalmente se registrarán en su ~/.bash_historyarchivo (o similar) en texto sin formato, incluidos todos los argumentos proporcionados (es decir, las frases de contraseña en este caso). Por lo tanto, se recomienda que use la primera opción a menos que tenga una razón específica para hacer lo contrario.

Sin embargo, tenga en cuenta que todavía puede usar -f keyfilesin tener que especificar -Pni -N, y que el archivo de claves está predeterminado ~/.ssh/id_rsa, por lo que en muchos casos, ni siquiera es necesario.

Es posible que desee considerar el uso de ssh-agent, que puede almacenar en caché la frase de contraseña durante un tiempo. Las últimas versiones de gpg-agent también admiten el protocolo que utiliza ssh-agent.

Torsten Marek
fuente
464
Para ser explícito: simplemente puede ejecutar ssh-keygen -pen una terminal. Luego le pedirá un archivo de clave (por defecto para mí el archivo correcto ~/.ssh/id_rsa), la frase de contraseña anterior (ingrese lo que tiene ahora) y la nueva frase de contraseña (ingrese nada).
Henrik N
34
Ex. :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK
24
-1 por hacer que el usuario escriba su contraseña en el terminal y hacerlo accesible a través de ~/.bash_history. Es mejor escribir:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
betoharres
55
Ustedes deben tener en cuenta que si ingresan el comando al shell, se inicia un espacio (blanco) que ese comando no se registra en el ~/.bash_hstoryIe. use `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` y estará bien (a menos que tenga otro keylogger allí). También podría deshacerse del registro de la historia ...
Enorme
14
Puede valer la pena agregar una línea que diga que esto sobrescribirá el archivo existente y no solicitará una nueva ubicación.
Lars Francke
46

$ ssh-keygen -p trabajó para mi

Abierto git bash. Pegado:$ ssh-keygen -p

Presiona enter para la ubicación predeterminada.

Ingrese la frase de contraseña anterior

Ingrese una nueva frase de contraseña - EN BLANCO

Confirmar nueva frase de contraseña - EN BLANCO

BOOM, el dolor de ingresar la frase de contraseña para el git push desapareció.

¡Gracias!

Karan
fuente
Si cuando presiona Intro para $ ssh-keygen -py su clave no está en la ubicación predeterminada, diga (/Users/yourname/.ssh/id_rsa), puede responder /Users/yourname/.ssh/yourkey
ingresando
37

Es posible que desee agregar lo siguiente a su .bash_profile (o equivalente), que inicia ssh-agent al iniciar sesión.

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

En algunas distribuciones de Linux (Ubuntu, Debian) puede usar:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

Esto copiará la identificación generada en una máquina remota y la agregará al llavero remoto.

Puedes leer más aquí y aquí .

mlambie
fuente
77
¿La distribución moderna no inicia un agente ssh fuera de la caja?
Troels Arvin el
En algunas distribuciones de Linux (Ubuntu, Debian) puede usar: ssh-copy-id -i ~ / .ssh / id_dsa.pub username @ host Suponiendo, por supuesto, que tenga acceso de esa manera. Y aunque es de 2008, tal vez debería editarse para referirse a id_rsa.pub (sí, podría editarlo, pero no me siento cómodo haciendo eso para los trabajos de otros, y especialmente para algo como esto).
Pryftan
@TroelsArvin Sí. Pero otoh hay momentos en que se mata (aunque no me viene a la mente la circunstancia que he encontrado, a menos que tal vez X11 tenga un problema y tenga que reiniciarlo ... esa podría ser una de esas instancias). En ese caso, tienes que 'recrearlo'.
Pryftan
8

Para cambiar o eliminar la frase de contraseña, a menudo me parece más simple pasar solo las banderas py f, luego dejo que el sistema me solicite que proporcione las frases de contraseña:

ssh-keygen -p -f <name-of-private-key>

Por ejemplo:

ssh-keygen -p -f id_rsa

Ingrese una contraseña vacía si desea eliminar la frase de contraseña.

Una ejecución de muestra para eliminar o cambiar una contraseña se ve así:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Al agregar una frase de contraseña a una clave que no tiene frase de contraseña, la ejecución se ve así:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
ccalvert
fuente
3

En Windows, puede usar PuttyGen para cargar el archivo de clave privada, eliminar la frase de contraseña y luego sobrescribir el archivo de clave privada existente.

Ajit Goel
fuente
2

En la Mac , puede almacenar la frase de contraseña para su clave ssh privada en su Llavero, lo que hace que su uso sea transparente. Si ha iniciado sesión, está disponible, cuando está desconectado su usuario raíz no puede usarlo. Eliminar la frase de contraseña es una mala idea porque cualquier persona con el archivo puede usarlo.

ssh-keygen -K

Agregue esto a ~/.ssh/config

UseKeychain yes
bbaassssiiee
fuente