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 piraté un script pour que cela fonctionne la plupart du temps, mais je soupçonnais tout le temps qu'il y avait un moyen de le faire que je venais juste de manquer. De plus, depuis cette époque, la technologie informatique a connu d’énormes progrès, 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, dans une session graphique démarrée à partir de gdm / kdm / etc, ou sur une console:
- si mon nom d'utilisateur n'a pas encore de nom en
ssh-agent
cours d' exécution, un est démarré, les variables d'environnement exportées etssh-add
appelées. - 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 encore de nom en
Cette fonctionnalité est particulièrement utile lorsque la boîte en question sert de point de relais lors de l’ ssh
entrée dans une troisième boîte. Dans ce cas, cela évite de devoir taper la phrase secrète de la clé privée chaque fois que vous faites ssh puis que vous voulez, par exemple, faire git push
ou faire quelque chose.
Le script ci-dessous le fait de manière très fiable, bien qu'il se soit récemment écrasé lorsque X s'est écrasé et que j'ai ensuite démarré une autre session graphique. Il pourrait y avoir eu d'autres problèmes dans ce cas.
Voici mon mauvais scénario. Je source ceci 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 existe un meilleur moyen de le faire. Veuillez également ne pas cocher les incohérences / gaffes (par exemple, mettre des var
éléments etc
); Je l'ai écrit il y a quelque temps et j'ai depuis appris beaucoup de choses.