Gibt es eine bequeme Möglichkeit, um sicherzustellen, dass alle Anmeldungen eines bestimmten Benutzers (dh ich) denselben ssh-Agenten verwenden? Ich habe ein Skript gehackt, damit dies die meiste Zeit funktioniert, aber ich habe die ganze Zeit vermutet, dass es einen Weg gibt, den ich gerade verpasst habe. Darüber hinaus gab es seitdem erstaunliche Fortschritte in der Computertechnologie, wie zum Beispiel diese Website.
Das Ziel hier ist also das
- Jedes Mal, wenn ich mich in der Box anmelde, egal ob über SSH oder in einer grafischen Sitzung, die von gdm / kdm / etc aus gestartet wurde, oder an einer Konsole:
- Wenn für meinen Benutzernamen derzeit kein Programm
ssh-agent
ausgeführt wird, wird eines gestartet, die Umgebungsvariablen werden exportiert undssh-add
aufgerufen. - Andernfalls werden die Koordinaten des vorhandenen Agenten in die Umgebungsvariablen der Anmeldesitzung exportiert.
- Wenn für meinen Benutzernamen derzeit kein Programm
Diese Funktion ist besonders dann nützlich, wenn die betreffende Box als ssh
Relaispunkt beim Einstecken in eine dritte Box verwendet wird. In diesem Fall müssen Sie die Passphrase des privaten Schlüssels nicht jedes Mal eingeben, wenn Sie sshen, und möchten dann beispielsweise git push
etwas tun oder so.
Das unten angegebene Skript erledigt dies größtenteils zuverlässig, obwohl es kürzlich verpfuscht wurde, als X abstürzte und ich dann eine weitere grafische Sitzung startete. In diesem Fall könnte eine andere Verrücktheit vor sich gegangen sein.
Hier ist mein schlechtes Skript. Ich beziehe das von meinem .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;
Sagen Sie mir bitte, dass es einen besseren Weg gibt, dies zu tun. Bitte wählen Sie auch nicht die Inkonsistenzen / Gaffes aus (zB das Einfügen von var
Sachen etc
); Ich habe das vor einiger Zeit geschrieben und seitdem viel gelernt.