Esiste un modo conveniente per garantire che tutti gli accessi da un determinato utente (cioè me) utilizzino lo stesso agente ssh? Ho hackerato una sceneggiatura per farlo funzionare la maggior parte del tempo, ma sospettavo sempre che ci fosse un modo per farlo che mi ero appena perso. Inoltre, da quel momento ci sono stati incredibili progressi nella tecnologia informatica, come ad esempio questo sito Web.
Quindi l'obiettivo qui è quello
- ogni volta che accedo al box, indipendentemente dal fatto che sia tramite SSH o in una sessione grafica avviata da gdm / kdm / etc, o da una console:
- se il mio nome utente non è attualmente in
ssh-agent
esecuzione, ne viene avviato uno, le variabili di ambiente esportate essh-add
chiamate. - in caso contrario, le coordinate dell'agente esistente vengono esportate nelle variabili di ambiente della sessione di accesso.
- se il mio nome utente non è attualmente in
Questa funzione è particolarmente utile quando la casella in questione viene utilizzata come punto di inoltro quando si ssh
inserisce in una terza casella. In questo caso evita di dover digitare la passphrase della chiave privata ogni volta che si immette e quindi si desidera, ad esempio, fare git push
o qualcosa del genere.
Lo script fornito di seguito lo fa in gran parte in modo affidabile, anche se recentemente è andato in rovina quando X è andato in crash e ho quindi iniziato un'altra sessione grafica. In quel caso potrebbero esserci stati altri problemi.
Ecco la mia sceneggiatura cattiva. Ho preso questo dal mio .bashrc
.
# ssh-agent-procure.bash
# v0.6.4
# ensures that all shells sourcing this file in profile/rc scripts use the same ssh-agent.
# copyright me, now; licensed under the DWTFYWT license.
mkdir -p "$HOME/etc/ssh";
function ssh-procure-launch-agent {
eval `ssh-agent -s -a ~/etc/ssh/ssh-agent-socket`;
ssh-add;
}
if [ ! $SSH_AGENT_PID ]; then
if [ -e ~/etc/ssh/ssh-agent-socket ] ; then
SSH_AGENT_PID=`ps -fC ssh-agent |grep 'etc/ssh/ssh-agent-socket' |sed -r 's/^\S+\s+(\S+).*$/\1/'`;
if [[ $SSH_AGENT_PID =~ [0-9]+ ]]; then
# in this case the agent has already been launched and we are just attaching to it.
##++ It should check that this pid is actually active & belongs to an ssh instance
export SSH_AGENT_PID;
SSH_AUTH_SOCK=~/etc/ssh/ssh-agent-socket; export SSH_AUTH_SOCK;
else
# in this case there is no agent running, so the socket file is left over from a graceless agent termination.
rm ~/etc/ssh/ssh-agent-socket;
ssh-procure-launch-agent;
fi;
else
ssh-procure-launch-agent;
fi;
fi;
Per favore, dimmi che c'è un modo migliore per farlo. Inoltre, per favore non pungere incoerenze / gaffes (es. Mettere var
cose etc
); L'ho scritto qualche tempo fa e da allora ho imparato molte cose.