Ist es neben all dem auch möglich, einen existierenden ssh-agent-Prozess zu finden und ihm meine Schlüssel hinzuzufügen?
Ja. Wir können die Verbindungsinformationen in einer Datei speichern:
# 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
Dieser Code stammt aus den Fallstricken von ssh-Agenten, der sowohl die Fallstricke dessen beschreibt, was Sie derzeit tun, diesen Ansatz, als auch, wie Sie ssh-ident verwenden sollten, um dies für Sie zu tun.
Wenn Sie ssh-agent nur ausführen möchten, wenn es nicht ausgeführt wird, und sonst nichts tun:
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
Dies gewährleistet jedoch nicht ssh-agent
zugänglich sein (nur weil es läuft, heißt das nicht, dass wir $SSH_AGENT_PID
haben für ssh-add
zu verbinden).
Nein, wirklich, wie man prüft, ob ssh-agent
läuft bereits in bash?
Bisherige Antworten scheinen die ursprüngliche Frage nicht zu beantworten...
Hier ist, was für mich funktioniert:
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
Das stammt von hier
Wenn Sie möchten, dass es direkt nach dem Beenden des Skripts beendet wird, können Sie dies einfach nach der eval-Zeile hinzufügen:
trap "kill $SSH_AGENT_PID" exit
Oder:
trap "ssh-agent -k" exit
$SSH_AGENT_PID
wird in der Auswertung von ssh-agent -s
gesetzt .
Sie sollten in der Lage sein, ssh-agent
zu finden s durch Scannen durch /tmp/ssh-*
und rekonstruiere die SSH_AGENT
Variablen daraus (SSH_AUTH_SOCK
und SSH_AGENT_PID
).
ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"
Einzeiliger Befehl. Beim ersten Ausführen wird ssh-agent gestartet. Beim zweiten Ausführen wird der SSH-Agent nicht gestartet. Einfacher und eleganter Kumpel !!!