El agente SSH pierde identidad mientras reinicia la máquina


12

Después de crear claves con nombre id_rsaen su ubicación predeterminada. Estoy agregando identidad al agente SSH con el comando ssh-add ~/.ssh/id_rsa, se está agregando con éxito.

Puedo SSH sin ingresar la frase clave de la clave, ya que ya está con el Agente SSH.

Pero , cuando reinicio la máquina o el servidor y luego verifico la identidad con el comando ssh-add -L, recibo un mensaje similar The agent has no identities.

¿Eso significa que cuando reiniciamos la máquina, el agente perdió identidad? ¿Es este comportamiento normal o algo que me falta aquí?

Guíame, no estoy muy familiarizado con SSH.


Vea este hilo en el sitio de Unix y Linux.
janosdivenyi

Respuestas:


12

Es normal. El propósito de un agente de claves es mantener las claves descifradas en la memoria , pero nunca las escribirá en el disco. (Eso anularía el propósito, ¿por qué no simplemente desproteger la clave principal en su lugar?)

Por lo tanto, las claves deben desbloquearse en cada inicio de sesión, y debe automatizar esto: en Linux, usar pam_sshes una opción; usa automáticamente la contraseña de su sistema operativo para desbloquear el agente. Otro módulo similar es pam_envoy, que es un poco más confiable afaik (pero requiere systemd).

Ambos módulos iniciarán el propio agente y cargarán las claves automáticamente.


¿Alguna idea de cómo automatizar en Mac OSX Terminal?
Niks

Cuando ejecuté el comando $SSH_AUTH_SOCK obtengo resultados como:: -bash: /tmp/ssh-gT43vE99vk/agent.511Permiso denegado Estoy confundido aquí ... si mi agente de reenvío funciona o no ... ¿puede guiarme?
Niks

No debe usarse como un comando, es una variable , algo que se usa como parte de otro comando. Por ejemplo echo $SSH_AUTH_SOCKpara imprimir su valor.
user1686

Hola amigo ... alguna idea? stackoverflow.com/questions/31916395/…
Niks

2

Intenta esto con tu ~ / .bashrc :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Esto solo debe solicitar la contraseña una vez que haya iniciado sesión.


Gracias por responder, eso significa que el agente SSH funciona correctamente. ¿Y después de agregar esto, no será necesario agregar identidad cada vez que inicie la máquina? Lo siento si esta es una pregunta tonta, pero soy muy nuevo en ssh.
Niks

Si su clave ssh tiene contraseña, se le solicitará cada vez que inicie sesión.
Shiro

Esta respuesta es dañina . Si haces lo que dice, eliminará tu clave privada. Si no tiene otra forma de autenticar, perderá el acceso a los sistemas en los que ha estado utilizando la autenticación de clave pública.
kasperd

2

En OS X, ssh-add tiene un indicador especial para conectarse a Keychain si decide almacenar su clave privada allí.

Solo corre ssh-add -K ~/.ssh/id_rsa.

Creo que esto responde tu pregunta más completamente. Este indicador específico de OS X es difícil de encontrar documentación, pero ha estado funcionando desde al menos OS X Leopard.


2
Esta es la respuesta correcta, seguida de una ssh-add -Aque agregará todas las claves en Keychain. Además, también cree ~/.ssh/configy agregue UseKeychain yespara que macOS siempre conserve su clave, como se describe aquí: unix.stackexchange.com/questions/140075/…
lucasarruda

Mi MacBook todavía olvida mi identidad cuando reinicio, incluso después de intentarlo.
Dominic Sayers

0

Esta solución es útil si sus claves ssh están protegidas con frase de contraseña.

El problema con todas las respuestas anteriores es que si su clave privada está protegida frase de contraseña, cada vez que se lanza un nuevo terminal y tratar de utilizar la clave privada, que haya que escribir la frase de contraseña y el resultado final será la ejecución de múltiples copias de la ssh-agentde memoria. La solución es agregar lo siguiente en su ~/.bashrco ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
     }
else
     start_agent;
fi
##### END Fix for ssh-agent #####

Esto le pedirá la contraseña de su (s) clave (s) privada (s) solo una vez cuando inicie un terminal. La apertura posterior de nuevas sesiones de terminal (o tmux seeions) reutilizará el agente ssh creado por el fragmento anterior.

Referencia

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.