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

12

Tengo una clave SSH privada que uso para la autenticación que se almacena en ~ / .ssh / id_rsa . Cuando ingreso 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 pueda ssh una y otra vez y no me pide mi contraseña.

Lo que no me gusta es que no estoy obligado a 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 caducar la contraseña es cuando cierro la sesión (lo cual rara vez hago).

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

Michael Kropat
fuente

Respuestas:

4

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

Abra Keychain Access y haga clic derecho en el llavero de inicio de sesión para cambiar la configuración: Configuración de seguridad de llavero

O si prefieres una línea de comando:

security set-keychain-settings -lu -t 14400

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

Dave Gregory
fuente
Esta no es una opción en El Capitan para mí, y el comando de línea de comandos no parece hacer ninguna diferencia, ¿sabes si hay una opción similar en El Capitan en alguna parte?
Ian
1
Estoy bastante seguro de que pude hacer esto en El Cap: acabo de comprobarlo y ambos métodos (UI y cmdline) ciertamente todavía funcionan en Sierra. Sin embargo, solo puedo hacerlo en el llavero de inicio de sesión, no en System o iCloud.
Dave Gregory
9

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.plisten 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 caducará la clave después de 30 minutos.

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

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

Michael Kropat
fuente
1
Un pedante como yo reemplazaría el "1800" con "30m", ya que lo hace un poco más fácil de leer. Vea FORMATOS DE TIEMPO en sshd_config (8) para ver el formato completo.
Tony Williams
@Tony Williams genial! arreglado
Michael Kropat el
Esto no parece estar funcionando para mí en Yosemite; ¿alguien mas?
Dave Gregory
Encontré una solución en Yosemite que no implica deshabilitar la Protección de integridad del sistema; agregado como respuesta a continuación.
Dave Gregory
1
Gracias por la información @Jaap. Actualmente no uso OS-X día a día, así que no puedo verificar nada personalmente, pero para tratar de ser un buen administrador de estas preguntas y respuestas, actualicé mi respuesta en función de su información y cambié la respuesta aceptada a Dave Gregory porque deshabilitar la Protección de integridad del sistema parece desaconsejable en muchos casos.
Michael Kropat el
7

Necesita establecer la vida de la clave. Por lo general, por defecto es para siempre.

Cuando corres ssh-addquieres usar la -topción. Si quieres una vida clave de una hora, entonces es ssh-add -t 1h. Los formatos de hora se pueden ver en la sshd_configpágina de manual, pero simplemente son un número seguido de s, m, h, d o w por 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 pide la frase de contraseña nuevamente cuando se intenta utilizarla.

La otra opción sería alterar las opciones de inicio para las ssh-agentque están almacenadas /System/Library/LaunchAgents/org.openbsd.ssh-agent.plisty agregar -tallí. (Lo uso LaunchControlpara cambiarlos, pero puede hacerlo a mano si tiene cuidado).

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

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, bastante molesto cuando desea establecer un tiempo de espera de unos segundos para la grabación de su contraseña de clave privada, y no tiene que deshabilitar su SIP para editar / Sistema / Library / LaunchAgents / org.openbsd.ssh-agent.plist.

symsymmas
fuente