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-agent
no 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 -A
entre en vigor. Elimine cualquier archivo de conexión ssh en formato /tmp/[host]
.