¿Cómo puedo resolver este problema ssh-agent?

17

Parece que estoy usando Linux Mint y, al parecer, no he podido hacer que gnome-keyring se desbloquee automáticamente al iniciar sesión.

Un síntoma de mi problema es el siguiente:

$ ssh-add
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

$ git pull
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-Nmf3J3/pkcs11: No such file or directory

¿Cómo puedo hacer que git pueda empujar / tirar sin ninguna entrada de contraseña?

Me doy cuenta de que hay varias cosas aquí con gnome-keyring y ssh-agent, pero no he podido precisarlo.

Ejecutar ssh-adddurante una sesión significa que ya no se me pide mi frase de contraseña para SSH / git.

El problema es que necesitaría ejecutar ssh-adddurante cada sesión; debo estar perdiendo cómo desbloquear el llavero de Gnome al iniciar sesión.

$ export | grep GNOME          
GNOME_KEYRING_CONTROL=/tmp/keyring-hjMM4V
GNOME_KEYRING_PID=1961

Sucedió nuevamente durante la misma sesión que la primera edición. Lo hice git pully conseguí WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-hjMM4V/pkcs11: No such file or directory.

$ env | grep SSH
SSH_AGENT_PID=2116
SSH_AUTH_SOCK=/tmp/ssh-OACxJMBY2038/agent.2038

$ ps -fp $SSH_AGENT_PID
UID        PID  PPID  C STIME TTY          TIME CMD
eoin      2116  2038  0 09:47 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager
eoinoc
fuente
1
¿Puedes correr export | grep GNOMEy publicar los resultados? ¿Has visto este error?
didster
Parece un error relevante. Como no siempre veo la advertencia, no estoy seguro de si tengo un problema más simple, simplemente gnome-keyringdesbloquear automáticamente al iniciar sesión.
eoinoc
posiblemente tenga otro agente que no sea gnome-keyring corriendo. ¿Qué pasa env | grep SSHyps -fp $SSH_AGENT_PID
Stéphane Chazelas
@StephaneChazelas He agregado lo que sugirió, gracias. Sí, he hecho la vida compleja con zshy tmuxcorriendo (solo por mencionar eso).
eoinoc

Respuestas:

2

Lo que debe suceder es:

Comienza una sesión de gnome, parte de la cual se inicia un demonio de llavero de gnome (que también actúa como un agente ssh) y el entorno de todo lo que se inició durante esa sesión de gnome se actualiza con información sobre cómo contactar a ese agente ssh. La contraseña que emite al iniciar sesión gráficamente se utiliza para desbloquear el llavero predeterminado.

Cuando usa gnome-keyring como un agente ssh, no desea usar otro agente como ssh-agent.

Cuando finaliza su sesión X, también lo hace gnome-keyring. Pero su sesión tmux permanece. Entonces, incluso si inicia otro gnome-keyring o ssh-agent, el entorno de los procesos ya iniciados tmuxno podrá hablar con él a menos que actualice su entorno con la ruta del nuevo socket.

Lo que puedes hacer es:

gnome-keyring-daemon -r > ~/.gkr

Y haz . ~/.gkren todas las conchas que quieras usar el nuevo llavero de gnomo

Sin embargo, tenga cuidado con la PANTALLA a la que se conectará gnome-keyring-daemon.

Stéphane Chazelas
fuente
¿Quiere decir que esto es solo para cuando finalice mi sesión X, en otras palabras, cuando cierre la sesión y vuelva a iniciarla? No tengo .gkr, ¿debería? ¿Cómo puedo tener cuidado con qué pantalla gnome-keyring-daemonse va a conectar?
eoinoc
2

Lo primero que probaría es apt-get install ssh-askpass-gnomeque si no tienes ese paquete (o algún programa askpass alternativo) instalado, entonces gnome no puede pedirte tu contraseña cuando necesites desbloquear tu clave.

También necesitará tener su DISPLAYvariable configurada correctamente:

$ echo $DISPLAY
:0.0

Además, ¿cómo estás iniciando tu terminal? Podría haber un problema con la forma en que está iniciando la sesión de terminal y si hereda o no gnome-session. Esto puede suceder cuando usa algún programa gnon-gnome para configurar sus enlaces de teclas.

Suponiendo que use gnome-terminalpuede verificar usando pstree. Aquí puede ver la herencia correcta que ocurre:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───xmonad-x86_64-l(27139)───gnome-terminal(26036)─┬─bash(26041)
                                                                                                                 ├─gnome-pty-helpe(+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 └─{gnome-terminal}+

Mientras que en esta sesión NO se hereda de gnome-session:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───sh(25919)───gnome-terminal(25920)─┬─bash(25927)
                                            ├─gnome-pty-helpe(25926)
                                            ├─{gnome-terminal}(25921)
                                            ├─{gnome-terminal}(25924)
                                            └─{gnome-terminal}(25928)

Además, verifique que ssh-agentesté siendo iniciado por gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)
aculich
fuente
Es un poco complicado sobre qué terminal estoy usando (¡es mi culpa!). Mi comando de inicio de terminal es mate-terminal --maximize -e tmux(que supongo que es gnome-terminal). Además, zshluego se carga dentro tmux. ssh-askpass-gnomefue instalado. $DISPLAYha esperado resultado. Para la herencia, tmuxse sienta debajo mate-terminalsin ninguna pretensión de gnome-session. En una rama separada, es tmux───zsh───xargs───pstree. Para responder a su última pregunta, la salida es: init───mdm───mdm───x-session-manag───ssh-agent. ¿Qué piensas? Gracias.
eoinoc
bueno, suponiendo que uses gnome (y creo que Mint lo hace por defecto, así que a menos que lo hayas cambiado por defecto), entonces creo que el problema no es mate-terminalheredarlo gnome-session. dos preguntas: 1) cuál es el resultado de pgrep -fl gnome-sessiony; 2) ¿Qué medidas toma para invocar realmente su terminal? de un menú? de un enlace de teclas de acceso rápido? o ????
aculich
Sí, estoy en Gnome. 1) La salida está vacía. 2) Muy interesante Yo suelo hacer Ctrl+Alt+t. Es un acceso directo que configuré usando la aplicación Linux Mint Keyboard Shortcutsusando el comando que mencioné anteriormente. Sin embargo , al iniciar a Terminaltravés del menú principal "Inicio", SSH actuó de manera diferente . La GUI de Gnome me solicitó mi contraseña para mi llavero. La opción para guardar esta frase de contraseña para sesiones posteriores estaba atenuada, no pude seleccionarla. (El comando del menú de inicio también lo es mate-terminal --maximize -e tmux). ¿Eso nos acerca? Gracias Aculich.
eoinoc
Si está viendo un comportamiento extraño con el Ctrl+Alt+tque configuró en los atajos de teclado, entonces creo que probablemente esté experimentando un error en mdm / MATE. ¿Qué versión de Mint estás ejecutando?
aculich
Tengo una versión detrás, en Linux Mint 13. Pero para el terminal al que se accede al menú, ¿por qué todavía no me deja seleccionar "guardar esta frase de contraseña cada vez que inicio sesión"?
eoinoc
1

Creo que hay un problema al almacenar permanentemente la clave SSH protegida con contraseña.

Por favor, eche un vistazo a los siguientes recursos:

Md Mahbubur Rahman
fuente
Voy a comentar sobre la marcha. Con el primer enlace, agregué `IdentityFile ~ / .ssh / id_rsa` ~/.ssh/configpero eso no lo solucionó.
eoinoc
El tercer enlace muestra la configuración básica que no parece ir más allá de lo que ya he hecho. Gracias, sin embargo.
eoinoc
-1

Agregue esto a su .bash_profile

if [ -n "$SSH_AUTH_SOCK" \
    -a "${SSH_AUTH_SOCK::13}" = "/tmp/keyring-" \
    -a ! -L "$SSH_AUTH_SOCK" ]
then
    OLD_AUTH_SOCK="$SSH_AUTH_SOCK"
    eval `ssh-agent`
    mv "$OLD_AUTH_SOCK" "$OLD_AUTH_SOCK"~
    ln -sfn "$SSH_AUTH_SOCK" "$OLD_AUTH_SOCK"
    SSH_AUTH_SOCK="$OLD_AUTH_SOCK"
fi
Mark Cohen
fuente
Gracias Mark Con esto, $SSH_AUTH_SOCKtiene un valor de /tmp/ssh-QCndYkdq2025/agent.2025. ¿Me estoy perdiendo de algo? $git pullTodavía aparece el mensaje de frase de contraseña SSH.
eoinoc
Verifique sus permisos en su archivo .ssh / Authorized_keys en el servidor. Debería ser 0600.
Mark Cohen
En el servidor? GitHub es el servidor externo, y mi clave SSH se graba allí. ¿No es más un problema local, no?
eoinoc
Lo siento, no me di cuenta de que estabas usando github. Sí, no tienes control sobre ese anfitrión. Puede agregar varias claves a su agente ssh y experimentar sshing a localhost para asegurarse de que puede autenticar correctamente. Además, puede probar ssh -vvv user @ host y ver qué se está rompiendo.
Mark Cohen
La mayoría de los sistemas Linux de escritorio (Mint incluido) se manejan ssh-agentcorrectamente al iniciar sesión desde el primer momento y, por lo general, son cosas como esta que se rompen. Si por alguna razón su sistema no maneja ssh-agent, no lo haga a mano. En su lugar use llavero que está bien diseñado para manejar este y otros problemas relacionados. También funciona para BSD (Mac) y otros sistemas que no son Linux.
aculich