Existe-t-il un moyen pratique de s'assurer que toutes les connexions d'un utilisateur donné (c'est-à-dire moi) utilisent le même agent ssh ? J'ai bricolé un script pour que cela fonctionne la plupart du temps, mais je soupçonnais depuis le début qu'il y avait un moyen de le faire que j'avais juste manqué. De plus, depuis cette époque, il y a eu des avancées étonnantes dans la technologie informatique, comme par exemple ce site web.
Donc le but ici est que
- à chaque fois que je me connecte à la boîte, que ce soit via SSH, ou dans une session graphique lancée depuis gdm/kdm/etc, ou sur une console :
- si mon nom d'utilisateur n'a pas actuellement un
ssh-agent
en cours d'exécution, l'un d'entre eux est démarré, les variables d'environnement sont exportées, etssh-add
appelé. - sinon, les coordonnées de l'agent existant sont exportées dans les variables d'environnement de la session de connexion.
- si mon nom d'utilisateur n'a pas actuellement un
Cette facilité est particulièrement précieuse lorsque la boîte en question est utilisée comme point de relais lorsque ssh
dans une troisième boîte. Dans ce cas, cela évite d'avoir à taper la phrase de passe de la clé privée à chaque fois que vous vous connectez par ssh et que vous voulez, par exemple, faire git push
ou quelque chose comme ça.
Le script donné ci-dessous fait cela de manière plutôt fiable, bien qu'il ait récemment bâclé lorsque X a planté et que j'ai ensuite lancé une autre session graphique. Il se peut qu'il y ait eu d'autres problèmes dans ce cas.
Voici mon script mauvais est bon. Je le tire de mon .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;
S'il vous plaît, dites-moi qu'il y a un meilleur moyen de faire ça. Aussi, s'il vous plaît, ne pinailler pas sur les incohérences/manques (par exemple, mettre le nom de l'auteur dans le texte). var
des choses dans etc
) ; j'ai écrit ceci il y a un certain temps et j'ai depuis appris beaucoup de choses.