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