GNU/Linux >> Tutoriels Linux >  >> Linux

Comment vérifier si ssh-agent est déjà en cours d'exécution dans bash ?

De plus, avec tout cela, est-il possible de trouver un processus ssh-agent existant et d'y ajouter mes clés ?

Oui. Nous pouvons stocker les informations de connexion dans un fichier :

# 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

Ce code provient des pièges des agents ssh qui décrit à la fois les pièges de ce que vous faites actuellement, de cette approche et comment vous devez utiliser ssh-ident pour le faire pour vous.

Si vous souhaitez uniquement exécuter ssh-agent s'il n'est pas en cours d'exécution et ne rien faire autrement :

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

Cependant, cela ne garantit pas ssh-agent sera accessible (ce n'est pas parce qu'il est en cours d'exécution que nous avons $SSH_AGENT_PID pour ssh-add auquel se connecter).


Non, vraiment, comment vérifier si ssh-agent s'exécute déjà dans bash ?

Les réponses jusqu'à présent ne semblent pas répondre à la question d'origine...

Voici ce qui fonctionne pour moi :

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

Ceci a été pris d'ici


Si vous voulez qu'il soit tué juste après la sortie du script, vous pouvez simplement ajouter ceci après la ligne eval :

trap "kill $SSH_AGENT_PID" exit

Ou :

trap "ssh-agent -k" exit

$SSH_AGENT_PID est défini dans l'évaluation de ssh-agent -s .

Vous devriez pouvoir trouver en cours d'exécution ssh-agent s en parcourant /tmp/ssh-* et reconstruire le SSH_AGENT variables de celui-ci (SSH_AUTH_SOCK et SSH_AGENT_PID ).


ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"

Commande sur une seule ligne. Exécuter pour la première fois démarrera ssh-agent. Exécuter pour la deuxième fois ne démarrera pas l'agent ssh. Compagnon simple et élégant !!!


Linux
  1. Comment vérifier si Bash a la vulnérabilité Shellshock ?

  2. Vérifier le processus si le même est en cours d'exécution ?

  3. Comment vérifier la sous-chaîne dans Shell Script Bash?

  4. Comment vérifier si la chaîne contient une sous-chaîne dans Bash

  5. Comment vérifier syslog dans Bash sous Linux ?

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment vérifier si une chaîne contient une sous-chaîne dans Bash

Comment vérifier tous les services en cours d'exécution sous Linux

Comment vérifier si un fichier ou un répertoire existe dans Bash Shell

Comment vérifier la syntaxe d'un script Bash sans l'exécuter ?