Hacer que mi clave SSH protegida con contraseña caduque o se agote después de un tiempo

Tengo una clave SSH privada que uso para la autenticación que está almacenada en ~/.ssh/id_rsa . Cuando entro en un servidor, se me solicita la contraseña para desbloquear la clave:

ingrese la descripción de la imagen aquí

Me gusta esto. También me gusta que puedo ssh una y otra vez y no me pide mi contraseña.

Lo que no me gusta es que no tengo que ingresar mi contraseña clave días o incluso semanas después. Puedo bloquear mi pantalla o ponerla en suspensión y todavía no tengo que ingresar mi contraseña clave. La única vez que parece que la contraseña caduca es cuando me desconecto (lo cual rara vez hago).

¿Cómo hago para que la contraseña de la clave caduque después de un tiempo, obligándome a ingresar mi contraseña nuevamente para autenticar? Haciendo que tal vez después de 1 hora, la clave se olvide automáticamente.

Respuestas (4)

En lugar de ajustar ssh-agent (que ahora requiere una cantidad tonta de piratería), recomiendo simplemente cambiar la configuración en su llavero predeterminado (de inicio de sesión). Utilizo el muy útil 'bloqueo al dormir' así como 'bloqueo después de 4 horas' porque no quiero avisos a menos que realmente esté afk.

Abra Acceso a Llaveros y haga clic con el botón derecho en el llavero de inicio de sesión para cambiar la configuración:Configuración de seguridad del llavero

O si prefiere una línea de comandos:

security set-keychain-settings -lu -t 14400

Esto dará como resultado al menos un aviso adicional para desbloquear el llavero (que requiere su contraseña de inicio de sesión), así como el aviso para cualquier clave que esté tratando de usar... pero es mejor que deshabilitar la Protección de integridad del sistema IMO.

Esta no es una opción en El Capitán para mí, y el comando de la línea de comandos no parece hacer ninguna diferencia, ¿sabe si hay una opción similar en El Capitán en alguna parte?
Estoy bastante seguro de que pude hacer esto en El Cap: acabo de verificar y ambos métodos (UI y cmdline) aún funcionan en Sierra. Sin embargo, solo puedo hacerlo en el llavero de inicio de sesión, no en System o iCloud.

Nota : en las versiones más recientes de OS X, debe deshabilitar la Protección de integridad del sistema para que esta respuesta funcione. (Gracias a @Dave Gregory y @Jaap por señalar esto).

Abrir /System/Library/LaunchAgents/com.openssh.ssh-agent.plist(en versiones anteriores: org.openbsd.ssh-agent.plist) en un editor de texto. Reemplazar:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
</array>

con:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
    <string>-t</string>
    <string>30m</string>
</array>

Esto hará que caduque la clave después de 30 minutos.

Reiniciar. Espera, reiniciar?!? ¡Esto no es Windows! Sí, reinicia.

Bueno, puedes intentar descifrar las instrucciones para cambiar la configuración sobre la marcha , pero buena suerte.

Un pedante como yo reemplazaría el "1800" con "30m" ya que lo hace un poco más fácil de leer. Consulte FORMATOS DE HORA en sshd_config(8) para ver el formato completo.
@Tony Williams genial! fijado
Esto no parece estar funcionando para mí en Yosemite; ¿alguien mas?
Encontré una solución en Yosemite que no implica deshabilitar la Protección de integridad del sistema; agregado como respuesta a continuación.
En El Capitan y Sierra, mis cambios fueron restablecidos por la actualización del sistema. Tuve que deshabilitar la Protección de integridad del sistema para poder editar el archivo plist (que se renombró en Sierra a com.openssh.ssh-agent.plist): developer.apple.com/library/content/documentation/Security/…
Gracias por la información @Jaap. Actualmente no uso OS-X todos los días, por lo que no puedo verificar nada personalmente, pero para tratar de ser un buen administrador de estas preguntas y respuestas, actualicé mi respuesta según su información y cambié la respuesta aceptada a Dave Gregory. porque deshabilitar System Integrity Protection parece desaconsejable en muchos casos.

Necesita configurar la vida de la llave. Por lo general, el valor predeterminado es para siempre.

Cuando corres ssh-addquieres usar la -topción. Si desea una vida clave de una hora, entonces lo es ssh-add -t 1h. Los formatos de tiempo se pueden ver en la sshd_configpágina del manual, pero en pocas palabras, son un número seguido de s, m, h, d o w para segundos, minutos, horas, días o semanas.

ssh-addse puede poner en su archivo .bashrc y solo le pedirá que valide la clave una vez. Incluso cuando la clave "caduca", no se elimina, solo solicita la frase de contraseña nuevamente cuando se intenta usarla.

La otra opción sería modificar las opciones de lanzamiento para ssh-agentlas que están almacenadas /System/Library/LaunchAgents/org.openbsd.ssh-agent.plisty agregarlas -tallí. (Los uso LaunchControlpara cambiarlos, pero puedes hacerlo a mano si tienes cuidado).

Prefiero no tener que recordar ejecutar ssh-addmanualmente antes de ejecutar sshcada vez. Es interesante, pero realmente estoy buscando algo automático.
+1 gracias por señalarme la org.openbsd.ssh-agent.plistsolución

Otra solución es:

ssh-add -t <time> <ssh-private-key>  # Set maximum lifetime to your SSH priv key.
killall ssh-agent                    # Kill all ssh-agent processes.
ssh-add -D                           # Delete all identities recorded by the agent.

Con esta solución, no tiene que elegir un tiempo de espera para todo su llavero, algo bastante molesto cuando desea establecer un tiempo de espera de algunos segundos para la grabación de su contraseña de clave privada, y no tiene que deshabilitar su SIP para editar /Sistema/ Biblioteca/LaunchAgents/org.openbsd.ssh-agent.plist.