ssh-add no es persistente entre reinicios

150

Agregué una clave ssh al agente por:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Después de reiniciar, el agente ya no tiene esta clave agregada:

$ ssh-add -l
The agent has no identities.

¿Por qué pasó esto?

ア レ ッ ク ス
fuente
No tengo tiempo para responder completamente en este momento, pero gpg-agent en modo ssh hará lo que quiera. Intente eso en lugar del legado ssh-agent. Si esto ayuda, podría intentar expandir esto cuando tenga tiempo más tarde.
Vality
@Vality: dudo que el gpg-agent sea persistente en todos los reinicios.
Pavel Šimerda 01 de
@ PavelŠimerda Cifra las claves privadas con la contraseña de los usuarios y luego las coloca $HOME/.gnupg/private-keys-v1.dtan pronto como las agregue con ssh-add. Realmente es persistente. Bueno, suponiendo que tenga un directorio de inicio no volátil.
Vality 01 de
@Vality: ¿No debería considerarse eso un problema de seguridad? ¿No podría usar una clave sin una frase de contraseña y terminar con ella sin necesidad de ningún agente?
Pavel Šimerda
1
@ PavelŠimerda No es realmente un problema de seguridad, ya que la clave se almacena encriptada con la contraseña de los usuarios, todavía necesita que se escriba la contraseña cada vez que el usuario inicia sesión para descifrarla. Almacenar la clave sin cifrar significa que un usuario con root (o un ladrón que tomó su disco duro) podría robarlos de su directorio de inicio, con gnupg si los roban, se cifrarán con su contraseña y, por lo tanto, serán inútiles.
Vality

Respuestas:

174

La adición de claves al agente es transitoria. Solo duran mientras el agente se está ejecutando. Si lo mata o reinicia su computadora, se perderán hasta que los vuelva a agregar. Desde la ssh-agentpágina del manual:

ssh-agent es un programa para contener claves privadas utilizadas para la autenticación de clave pública (RSA, DSA, ECDSA). La idea es que ssh-agent se inicie al comienzo de una sesión X o una sesión de inicio de sesión, y todas las demás ventanas o programas se inician como clientes del programa ssh-agent. Mediante el uso de variables de entorno, el agente se puede ubicar y usar automáticamente para la autenticación al iniciar sesión en otras máquinas usando ssh (1).

El agente inicialmente no tiene ninguna clave privada. Las claves se agregan usando ssh-add (1). Cuando se ejecuta sin argumentos, ssh-add (1) añade los archivos ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsay ~/.ssh/identity. Si la identidad tiene una frase de contraseña, ssh-add (1) solicita la frase de contraseña en el terminal si tiene una o de un pequeño programa X11 si se ejecuta bajo X11. Si ninguno de estos es el caso, la autenticación fallará. Luego envía la identidad al agente. Se pueden almacenar varias identidades en el agente; el agente puede usar automáticamente cualquiera de estas identidades. ssh-add -lmuestra las identidades que actualmente tiene el agente.

macOS Sierra

Comenzando con macOS Sierra 10.12.2 , Apple ha agregado una opción de configuración UseKeychain para configuraciones SSH. Puede activar esta función agregando UseKeychain yesa su ~/.ssh/config.

Host *
  UseKeychain yes

Llavero OSX

No uso OSX, pero encontré estas preguntas y respuestas en SuperUser tituladas: ¿Cómo usar Mac OS X Keychain con claves SSH? .

Entiendo que desde Mac OS X Leopard, el llavero ha admitido el almacenamiento de claves SSH. ¿Podría alguien explicar cómo se supone que funciona esta función?

Entonces, por lo que parece, podría importar sus claves SSH en Keychain usando este comando:

$ ssh-add -K [path/to/private SSH key]

Sus claves deberían persistir de arranque a arranque.

Cada vez que reinicie su Mac, todas las claves SSH en su llavero se cargarán automáticamente. Debería poder ver las teclas en la aplicación Keychain Access, así como desde la línea de comandos a través de:

  ssh-add -l

Fuente: Superusuario: ¿Cómo usar Mac OS X Keychain con claves SSH?

slm
fuente
¿De Verdad? En Linux no tengo este problema. ¿Tengo que "ssh-add my_key" cada vez que reinicio mi computadora?
ア レ ッ ク ス
2
@Alex Como explica la respuesta, el agente agrega automáticamente ~/.ssh/id_rsa. Supongo que esta es la ubicación de su archivo de claves en Linux. También es posible que no esté utilizando el agente de clave ssh estándar. Hay otros, como gnome-keyring-daemon, que pueden tener un comportamiento diferente.
Patrick
pero en Mac se llama "id_rsa_mac". ¿Cómo hago para que el agente lo agregue automáticamente?
ア レ ッ ク ス
@Patrick: no estoy seguro de si el clásico ssh-agentagrega claves automáticamente. En mi opinión, es ssh-addque lee las ubicaciones estándar o el sshcliente si no está utilizando el agente.
Pavel Šimerda 01 de
55
Pequeña nota al margen, si su comando ssh-add no reconoce el indicador -K, probablemente esté utilizando la versión macports de ssh-add ... puede omitir la versión macports especificando la ruta completa a la versión OSX de ssh-add así:/usr/bin/ssh-add -K /path/to/private/key
ChrisR
20

El ssh-agentes un servicio de sesión que almacena claves temporalmente para el usuario.

El objetivo principal del agente SSH es recordar la versión de texto sin cifrar de una clave asegurada con una frase de contraseña. En otras palabras, la clave se almacena en el disco encriptado usando una frase de contraseña y el propietario de la clave usa ssh-addo alguna herramienta GUI para proporcionar la frase de contraseña e indicar al agente que la recuerde hasta que la sesión finalice o el usuario solicite la eliminación explícitamente.

Si no está utilizando una frase de contraseña y no está utilizando el reenvío de agente (que de todos modos no es seguro para la mayoría de los propósitos), no necesita el agente en absoluto . Cualquier cliente SSH debería poder leer la clave desde el disco, ya sea desde una ubicación estándar o desde una especificada explícitamente.

Las ubicaciones estándar se enumeran en la página del manual ssh(1):

El valor predeterminado es ~ / .ssh / identity para la versión 1 del protocolo, y ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 y ~ / .ssh / id_rsa para la versión 2 del protocolo.

Cuando use ubicaciones no estándar, puede usar el -iinterruptor sshdescrito en la misma página del manual, o la opción respectiva en el cliente SSH que está usando.

Pavel Šimerda
fuente
44
+1 por abogar por la no utilización dessh-agent
dg99
7

En sierra :

Use UseKeychain . (No he probado esto, pero parece la solución más correcta).

O

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

O cree un archivo plist en lugar de agregarlo ~/.bash_profile.

Descargo de responsabilidad: como otros han señalado, no sé qué tan seguro es almacenar frases de contraseña ssh en llaveros.

David Winiecki
fuente
Intenté todos los métodos anteriores pero solo este funciona. ¡Gracias!
Duannx