GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo verificar si ssh-agent ya se está ejecutando en bash?

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 !!!


Linux
  1. ¿Comprobar el proceso si se está ejecutando lo mismo?

  2. ¿Cómo verificar el progreso de la ejecución de Cp?

  3. ¿Cómo verificar la subcadena en Shell Script Bash?

  4. ¿Cómo verificar si Bash puede imprimir colores?

  5. ¿Cómo verificar si los demonios de Hadoop se están ejecutando?

Cómo verificar si existe un archivo o directorio en Bash

Cómo verificar si existe un archivo o directorio en Bash

Cómo verificar si una cadena contiene una subcadena en Bash

Cómo verificar todos los servicios en ejecución en Linux

Cómo verificar si existe un archivo o directorio en Bash Shell

¿Cómo verifico la sintaxis de un script Bash sin ejecutarlo?