¿Cómo puedo guardar permanentemente una clave SSH protegida con contraseña?

9

Estoy usando Awesome Window Manager

¿Cómo puedo agregar permanentemente claves privadas con contraseña?

Inspirado por la respuesta aquí , he agregado las claves privadas en ~ / .ssh / config

Contenido de ~ / .ssh / config:

IdentityFile 'private key full path'

Permisos de ~ / .ssh / config: 0700

Pero no me funciona.

Si agrego manualmente la clave en cada sesión, funciona, pero estoy buscando una forma más elegante (no en .bashrc)

EDITAR :

  • Usando la versión clásica de Gnome (sin efectos).

Después de agregar la clave SSH con ssh-copy-ifel host remoto, aparece el siguiente mensaje en el terminal (GNOME Terminal 3.0.1) cuando inicio sesión:

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • Usando Awesome Window Manager v3.4.10. Ya lo había hecho, gnome-keyring-dameonasí que maté al otro pid y gnome-keyring-daemon --start | grep SOCKejecuté (también lo agregué en .profile) la salida (grep):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

Seguí exactamente los mismos pasos e igualmente no tengo ningún diálogo GUI ssh-add.

EDITAR 2 :

Creé una nueva clave protegida por contraseña de la máquina virtual Ubuntu 11.10 en unity y todavía no puedo obtener ninguna solicitud de contraseña.

EDITAR 3 : Parece que esto no puede funcionar en Awesome window manager :( y posiblemente otros ...

pl1nk
fuente
1
¿Cuál es el punto de agregar una clave SSH protegida por contraseña? Derrota el propósito ...
MarkovCh1
3
@Syzygy Bueno, ¿escribe siempre las contraseñas de diferentes servicios y aplicaciones o está utilizando un llavero para desbloquear su contraseña con su contraseña de inicio de sesión?
pl1nk
¿Alguna otra idea / pregunta, por favor? El período de gracia de recompensa vence REALMENTE pronto :-)
ish
@izx He verificado todo lo que mencionaste y todo está como se esperaba. Como mencioné en mi actualización, también había usado Gnome. ¿Debo presentar un error?
pl1nk
Puede encontrar algunas pistas aquí . Parece que el orden en que comienzan las cosas es importante, y para gnome-keyring-daemon llegar al dbus también es importante.
John S Gruber

Respuestas:

2

Si está utilizando Unity o un administrador de sesión que inicia gnome-keyring-daemon, simplemente puede usar Seahorse (Contraseñas y claves) para establecer una clave, definir para qué sirve, establecer una frase de contraseña y distribuir su clave pública a computadora que vas a usar con ssh. No se necesitan comandos de terminal.

Usted crea la contraseña de la siguiente manera:

  1. seleccionando File-> New y seleccione Secure Shell Key. Presione Continuar.

  2. Escriba un nombre descriptivo y seleccione Create and set up.

  3. Se le pedirá que ingrese una frase clave dos veces (la segunda vez para verificar que no la ingresó incorrectamente la primera vez).

  4. Ingrese la computadora en la que se debe usar la clave pública y el nombre de usuario en esa computadora para la cual usará la clave. La clave pública se copiará en esa otra computadora, solicitando su contraseña en esa computadora si es necesario.

Ahora la My Personal Keyspestaña mostrará la clave.

Suponiendo que gnome-keyring-daemon se inició correctamente cuando inició sesión en Lightdm, y nuevamente por su administrador de sesión, cuando use la clave por primera vez con ssh, se le pedirá la frase clave. En este cuadro de diálogo puede proporcionar la frase clave, seleccionar el Detailscontrol y solicitar que se desbloquee el llavero cada vez que inicie sesión, proporcionando automáticamente esta clave. prensaOK

Es posible que no se le solicite de esta manera si hay otra clave disponible para iniciar sesión en la computadora remota.

Después de que esto se haya logrado, la primera pestaña Seahorse Passwordsmostrará una "Entrada de contraseña de desbloqueo" para el nombre de la clave. Haga clic en el triángulo antes de " Contraseñas: Iniciar sesión" para verlo.

John S Gruber
fuente
Por lo tanto, esta funcionalidad no funciona con Awesome WM. Me gustaría seguir usando Awesome para seguir usando mi solución.
pl1nk
19

Hacer que una clave SSH protegida con contraseña persista entre sesiones y reinicios

Esto es probablemente lo que desea: ingresar la frase de contraseña clave una vez que esté disponible para siempre cuando esté conectado. Funcionará para la mayoría de los usuarios que usan los escritorios Unity o Gnome.

  • Cuando se conecta después de agregar la clave pública al servidor remoto, obtendrá el cuadro de diálogo ssh-add de la GUI:

    ingrese la descripción de la imagen aquí

  • Expanda los "Detalles" haciendo clic en el triángulo, y obtendrá lo siguiente. El valor predeterminado es "bloquear llavero cuando cierre sesión", que requiere que ingrese la contraseña una vez por sesión:

    ingrese la descripción de la imagen aquí

  • Cámbielo a Desbloqueo automático ... cada vez que inicie sesión , lo que significa que funcionará siempre que haya iniciado sesión en su sesión: está "controlado" por su contraseña de usuario. Persistirá durante los reinicios.

    ingrese la descripción de la imagen aquí

  • Ingrese la frase clave una vez y listo: la clave se autentica a través del inicio de sesión exitoso inicial en su entorno de escritorio.


Si estás usando AwesomeWM

Probado con una nueva instalación de AwesomeWM en un nuevo ID de usuario

  • Por defecto, AwesomeWM usa ssh-agent:

    $ export | grep SSH
    declare -x SSH_AGENT_PID = "5479"
    declare -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • Para que los pasos anteriores funcionen, debe usar gnome-keyring-daemoncomo demonio de autenticación SSH, no ssh-agent. Cuando inicia sesión con lightdm, se inicia PAM gnome-keyring-daemonque intentará desbloquear una clave de inicio de sesión con su contraseña de desbloqueo, pero debe agregar a su configuración para mantenerla en funcionamiento y usarla.

  • Agregue lo siguiente al final de su ~/.xprofile:

      #! / bin / bash
      eval $ (gnome-keyring-daemon --start)
      exportar SSH_AUTH_SOCK
      exportar GNOME_KEYRING_PID
      exportar GNOME_KEYRING_CONTROL
    

Los comandos en el ~/.xprofilearchivo serán ejecutados por xsession antes de iniciar el impresionante administrador de ventanas y lo vinculará con el gnome-keyring-daemon --loginproceso iniciado por PAM a través de las variables de entorno anteriores.

  • Cierre sesión en lightdm e inicie sesión nuevamente, y ahora cuando lo haga ssh user@host, debería obtener las ventanas emergentes anteriores: úselas para decodificar sus claves privadas en ~ / .ssh / y guarde sus claves privadas en el llavero de inicio de sesión de gnome-keyring.

La solución general para cualquier entorno de escritorio / administrador de ventanas

  • es usar en gnome-keyring-daemonlugar de ssh-agent. Para esto, debe estar ejecutándose gnome-keyring-daemon y tenerlo inicializado y hacer esto después de que ssh-agentse inicie o no iniciar ssh-agenten absoluto.

  • ssh(en realidad, ssh-add) decide a qué agente de autenticación llamar en función del valor de la SSH_AUTH_SOCKvariable de entorno, que se puede verificar escribiendoexport | grep SOCK

  • este es el formulario SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130para ssh-agent (NO es lo que desea poder guardar su clave)

  • pero de la forma SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"para gnome-keyring-daemon (que quieres)

  • así que verifique el valor, y verifique ps aux | grep keyringque gnome-keyring-daemon se esté ejecutando, y si es así, inicialícelo con los resultados degnome-keyring-daemon --start

  • a continuación, puede verificar las identidades guardadas asociadas en la consola escribiendo ssh-add -l: si muestra "sin agente", cometió un error al configurar gnome-keyring-daemon.

ish
fuente
Bueno, no he visto esto! ¿Qué comando puedo usar o incluso mejor a qué comando llama este diálogo?
pl1nk
@izx cuando se usa esto, ¿es necesario usar ssh-add?
John S Gruber
@JohnSGruber No, siempre que las claves privadas estén en uso ~/.ssh, no hay necesidad de usarlas ssh-add; el cuadro de diálogo aparecerá al primer uso. Tenga en cuenta que esto solo funciona en Unity / Gnome: ¡descubrí en el chat que el OP está usando AwesomeWM , donde esto no funciona!
ish
1
@ pl1nk: vea la solución actualizada para AwesomeWM hacia el final de la respuesta.
ish
@izx: gracias por su apoyo general, consulte mi pregunta actualizada.
pl1nk
2

La solución a su problema es usar el agente ssh. Solo tiene que desbloquear la contraseña de su clave una vez, luego el agente la guarda en la memoria y la usa automáticamente

  • Genere un par de claves privada / pública con ssh-keygen -t dsa
  • Copie la clave pública en la máquina remota, generalmente esta es ~ / .ssh / Authorizedkeys (úsela ssh-copy-idpara esto)
  • Ejecutar ssh-addantes de iniciar sesión en el sistema remoto, esto le pedirá su contraseña y la almacenará
  • Inicie sesión en el sistema remoto, no necesita contraseña

ssh-agent se describe bien en .net, por ejemplo aquí:

Otra ventaja de ssh-agent es que si inicia sesión en el sistema remoto con ssh -A [email protected]él, puede enviar más ssh desde la computadora domain.name a una tercera computadora que contenga su clave pública sin tener que copiar su clave privada en la computadora domain.name (y nunca ve su clave privada, solo el desafío / respuesta única).

Floyd
fuente
¿Cómo puedo hacer eso? No está claro por las instrucciones que envió. Además, ¿está relacionado con Ubuntu?
pl1nk
He editado mi post con instrucciones detalladas
Floyd
Su solución almacena la contraseña por sesión, además, en mi caso, parece que fue un conflicto con el llavero de gnomo, como puede ver en mi respuesta.
pl1nk
@ pl1nk: por lo que necesita que la contraseña se almacene en todas las sesiones, es decir, ¿se le solicita solo una vez para cada arranque?
ish
Sí, debe proporcionar la contraseña una vez por sesión. Esta es toda la idea detrás de las claves ssh protegidas con contraseña, para proporcionar otra capa de seguridad más allá de poder acceder al archivo de clave privada después de iniciar sesión.
Floyd
-1

puedes usar

ssh-add 'filename or fullpath'

se le pedirá la frase de contraseña si tiene una clave

entonces puedes conectarte sin contraseña

eyadof
fuente
1
Como mencioné a mi pregunta, estoy buscando una forma más elegante.
pl1nk
-2

Si desea trabajar con claves privadas, haga lo siguiente:

ssh-keygen -t rsa -N ''

Entonces:

copiar .ssh/id_rsa.pubal destino de la máquina a .ssh/authorized_keystravés de scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

Todo listo.

Conéctese a la máquina remota sin contraseña:

ssh user@remote_machine

Y no tenemos solicitud de contraseña.

Octávio Filipe Gonçalves
fuente
Esto me seguirá pidiendo la contraseña clave cada vez.
pl1nk
1
Probablemente porque cuando ejecutas ssh-keygen -t rsa -N '', pones una contraseña. Entonces, cuando ejecute el comando anterior, no ponga una contraseña, solo presione la tecla "ENTER".
Octávio Filipe Gonçalves
Bueno, me gustaría tener claves con contraseña.
Actualicé
1
Ok, no entiendo por qué quieres hacer esto con contraseña. Normalmente, este concepto se usa solo para hacer conexiones con máquinas remotas que pueden reconocer la máquina del Cliente sin autenticación. Entonces, si no quiere este escenario, solo tiene que hacer es ejecutar una conexión ssh normal. ¿Correcto?
Octávio Filipe Gonçalves
1
Decirle a la gente que copie su clave pública a través de las claves autorizadas en una máquina remota es una fuerza bruta ... Mucho mejor es usar el comando ssh-copy-id user @ remotemachine, que usará una contraseña para iniciar sesión la primera vez y luego APPEND no sobrescribe la clave.
Floyd