Introduction
-
SSH: Secure Shell, outil de connections interactives
distantes et sécurisées, reconnu et largement utilisé.
-
Remplace de facto les anciennes
r-commandes.
-
très utilisé: d'autres programmes en font un plugin
permettant de sécuriser un canal de communication (par exemple: CVS,
rsync, etc).
Caractéristiques
Configuration du client SSH
Agent SSH
Il résoud le problème du dévérouillage répété de la clé privée
localement, et permet ensuite de rebondir de machines en machines SANS
changer de clé privée.
-
En général lancé dans le xinitrc. Un processus en background, et des
variables d'environnement du shell pour savoir comment parler à ce
processus (PID, SOCKET, etc). L'agent ssh ne vit que pendant la
durée de la session X.
-
Ajout de clés dans l'agent par
ssh-add
ou ssh-add
~/.ssh/private-key-file
.
-
On peut charger plusieurs clés privées dans l'agent (ssh1, ssh2 par
exemple)
-
Vérification du contenu de l'agent par
ssh-add -l
.
Utilisation avec l'agent
Rien à faire ou presque, ssh contacte l'agent de manière transparente,
et s'il trouve la bonne clé privée, il l'utilise (et n'a pas besoin de
demander la passphrase à l'utilisateur).
-
Penser à activer l'option
ForwardAgent
localement, si
ca n'est pas fait au niveau de la config de la machine.
-
Vérifier que les clés de l'agent ont été forwardées sur la machine
distantes, avec
ssh-add -l
. Noter qu'un nouvel agent
ssh n'est pas lancé sur la machine distante , mais l'agent ssh local
est contacté à travers le tunnel ssh qui vient d'être créé.
-
Des rebonds vers d'autres machines en cascade sont possibles selon le
même principe.
Astuce pour récupérer le lien vers l'agent SSH
Si on lance un émulateur de terminal qui n'est pas descendant du
processus ssh-add, il n'héritera pas des variables d'environnement lui
permettant de contacter le processus ssh-agent local. Il lui manque ces
variables :
SSH_AGENT_PID=21455
SSH_AUTH_SOCK=/tmp/ssh-KkbhD21454/agent.21454
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
On peut les reconstruire localement avec le script suivant:
$ more ~/.ssh-agent.sh
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
if [ -z $USER ]; then
export USER=`whoami`
fi
if [ -z $SSH_AGENT_PID ]; then
export SSH_AGENT_PID=`ps --user $USER | grep ssh-agent |\
grep -v grep | head -1 | awk '{print $1}'`
fi
if [ $SSH_AGENT_PID ]; then
export SSH_AUTH_SOCK=`sudo netstat -xnlp |\
grep ${SSH_AGENT_PID}/ssh-agent | awk '{print $10}'`
count=`ssh-add -l | wc | awk '{print $1}'`
if [ $count -ne 2 ]; then
unset SSH_AGENT_PID
unset SSH_AUTH_SOCK
fi
fi
Conclusions
-
L'utilisation de ssh-agent avec une utilisation soutenue de ssh
s'avère indispensable.
-
L'équivalent du ssh-agent existe aussi sous Windows, dans la suite putty.
Références