¿Una forma sencilla de ejecutar ssh-agent y ssh-add al iniciar sesión a través de SSH?

¿Una forma sencilla de ejecutar ssh-agent y ssh-add al iniciar sesión a través de SSH?

Estoy intentando que los siguientes comandos se ejecuten automáticamente cuando inicio sesión en mi servidor a través de ssh:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Mi clave ssh tiene una frase de contraseña y puedo ingresarla una vez por inicio de sesión.

Intenté poner esto en mi archivo .bashrc, sin embargo, creo que ssh-agent inicia una nueva sesión bash. Cuando intento iniciar sesión después de tener esto en mi .bashrc, se bloquea y tengo que escribir "salir" para ver el mensaje "ingrese la frase de contraseña para desbloquear la clave".

¿Cualquier otra sugerencia?

El servidor ejecuta Ubuntu LTS

Respuesta1

Puedes intentar agregar esto:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

De esta manera, ssh-agentno inicia un nuevo shell, simplemente se inicia en segundo plano y escupe los comandos del shell para configurar las variables de entorno apropiadas.

Como se dice en el comentario, tal vez sí.nodesea ejecutar el agente en el host remoto, sino en el cuadro desde el que está trabajando, y use

ssh -A remote-host

para reenviar los servicios de su agente ssh local al host remoto.

Por razones de seguridad, solo debes utilizar el reenvío de agentes con hosts administrados por personas confiables, pero es mejor que ejecutar un agente completo de forma remota en cualquier momento.

Respuesta2

Otra alternativa es agregar esto a su .bashrc. Esto tiene la misma ventaja que la respuesta de Erik (garantizar una sola instancia) pero no requiere un paquete adicional.

# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
    echo Starting SSH Agent
    eval $(ssh-agent -s)
fi

Esto ejecuta ssh-add si no hay al menos 1 clave cargada y establece un tiempo de espera de clave de 1 día:

ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
     echo Adding keys...
     ssh-add -t 1d
fi

Respuesta3

Una alternativa es utilizar Funtoo.Llavero. Luego puedes pegar esta frase en tu shell bash:

eval $(keychain --eval id_rsa)

Eso hace lo mismo (lanza el agente ssh, etc.), sin ejecutar un proceso de agente ssh para cada subshell. En lugar de eso, busca instancias de su propiedad que "ya se estén ejecutando" y lo vincula a ellas.

Respuesta4

También tenga en cuenta que si tiene una conexión ssh activa, deberá eliminar los archivos de conexión existentes antes de que -Aentre en vigor. Elimine cualquier archivo de conexión ssh en formato /tmp/[host].

información relacionada