Je také možné spolu s tím vším najít existující proces ssh-agenta a přidat do něj moje klíče?
Ano. Informace o připojení můžeme uložit do souboru:
# 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
Tento kód je z úskalí agentů ssh, který popisuje úskalí toho, co právě děláte, tohoto přístupu a jak byste to měli pomocí ssh-ident udělat za vás.
Pokud chcete ssh-agent spustit pouze v případě, že neběží, a jinak nedělat nic:
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
To však nezaručuje ssh-agent
bude přístupný (to, že běží, neznamená, že máme $SSH_AGENT_PID
pro ssh-add
pro připojení).
Ne, opravdu, jak zkontrolovat, zda ssh-agent
již běží v bash?
Zdá se, že dosavadní odpovědi neodpovídají na původní otázku...
Zde je to, co pro mě funguje:
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
Toto bylo převzato odtud
Pokud chcete, aby byl zabit hned po ukončení skriptu, můžete přidat toto za řádek eval:
trap "kill $SSH_AGENT_PID" exit
Nebo:
trap "ssh-agent -k" exit
$SSH_AGENT_PID
nastaví se na hodnotu ssh-agent -s
.
Měli byste být schopni najít běžící ssh-agent
s skenováním přes /tmp/ssh-*
a rekonstruovat SSH_AGENT
proměnné z něj (SSH_AUTH_SOCK
a SSH_AGENT_PID
).
ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"
Jednořádkový příkaz. První spuštění spustí ssh-agent. Spuštění podruhé nespustí ssh-agenta. Jednoduché a elegantní Mate !!!