Además, además de todo esto, ¿es posible encontrar un proceso ssh-agent existente y agregarle mis claves?
Sí. Podemos almacenar la información de conexión en un archivo:
# Ensure agent is running
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
# Could not open a connection to your authentication agent.
# Load stored agent connection info.
test -r ~/.ssh-agent && \
eval "$(<~/.ssh-agent)" >/dev/null
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
# Start agent and store agent connection info.
(umask 066; ssh-agent > ~/.ssh-agent)
eval "$(<~/.ssh-agent)" >/dev/null
fi
fi
# Load identities
ssh-add -l &>/dev/null
if [ "$?" == 1 ]; then
# The agent has no identities.
# Time to add one.
ssh-add -t 4h
fi
Este código proviene de las trampas de los agentes ssh y describe las trampas de lo que está haciendo actualmente, de este enfoque y cómo debe usar ssh-ident para hacer esto por usted.
Si solo desea ejecutar ssh-agent si no se está ejecutando y no hacer nada de lo contrario:
if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then
echo "ssh-agent is already running"
else
eval $(ssh-agent -s)
if [ "$(ssh-add -l)" == "The agent has no identities." ] ; then
ssh-add ~/.ssh/id_rsa
fi
# Don't leave extra agents around: kill it on exit. You may not want this part.
trap "ssh-agent -k" exit
fi
Sin embargo, esto no garantiza que ssh-agent
será accesible (el hecho de que se esté ejecutando no significa que tengamos $SSH_AGENT_PID
para ssh-add
para conectarse).
No, de verdad, cómo verificar si ssh-agent
ya se está ejecutando en bash?
Las respuestas hasta ahora no parecen responder a la pregunta original...
Esto es lo que funciona para mí:
if ps -p $SSH_AGENT_PID > /dev/null
then
echo "ssh-agent is already running"
# Do something knowing the pid exists, i.e. the process with $PID is running
else
eval `ssh-agent -s`
fi
Esto fue tomado de aquí
Si desea que se elimine justo después de que finalice el script, puede agregar esto después de la línea de evaluación:
trap "kill $SSH_AGENT_PID" exit
O:
trap "ssh-agent -k" exit
$SSH_AGENT_PID
se establece en la evaluación de ssh-agent -s
.
Debería poder encontrar ejecutando ssh-agent
s escaneando a través de /tmp/ssh-*
y reconstruir el SSH_AGENT
variables de él (SSH_AUTH_SOCK
y SSH_AGENT_PID
).
ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"
Comando de una sola línea. Ejecutar por primera vez iniciará ssh-agent. Ejecutar por segunda vez no iniciará el ssh-agent. Mate Sencillo y Elegante !!!