Ajout automatique d’une passphrase SSH
Salut
Je dois effectuer des échanges de fichier via SFTP, la clé SSH doit être protégée par une passphrase. Cette passphrase ne peut pas être entrée par l'utilisateur à chaque fois qu'il se connecte. Cette procédure permet d'automatiser le lancement de l'agent-ssh et l'ajout de la passphrase. A la déconnexion de l'utilisateur, l'agent-ssh est killé.
Installer le paquet expect
Générer une passphase SSH de 24 caractères
fbLCWGhDlrym2y17Q6LZDhvR
Génération de la paire de clés SSH (la passphrase est réellement en clair dans le script expect /home/foo/.ssh/sftp-server_example_com.exp)
$ mkdir .ssh; chmod 700 .ssh; cd .ssh
$ ssh-keygen -t rsa -b 2048 -P fbLCWGhDlrym2y17Q6LZDhvR -f id_sftp-server_example_com
$ chmod 600 id_sftp-server_example_com*
$ ls -altr id_sftp-server_example_com*
-rw------- 1 foo foo 1743 Jul 2 12:39 id_sftp-server_example_com
-rw------- 1 foo foo 397 Jul 2 12:40 id_sftp-server_example_com.pub
Envoyer la clé publique id_sftp-server_example_com.pub au partenaire sftp-server.example.com
Le fichier de configuration SSH spécifie la clé à utiliser pour se connecter sur le serveur de notre partenaire sftp-server.example.com
Fichier /home/foo/.ssh/config
User foo
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
Host sftp-server.example.com
User client
IdentityFile ~/.ssh/id_sftp-server_example_com
StrictHostKeyChecking no
Script d’ajout de la passphrase à l’agent SSH.
Fichier /home/foo/.ssh/.exp (droit en 700)
spawn ssh-add /home/foo/.ssh/id_sftp-server_example_com
expect "Enter passphrase for /home/foo/.ssh/id_sftp-server_example_com:"
send "fbLCWGhDlrym2y17Q6LZDhvR\n";
expect "Identity added: /home/foo/.ssh/id_sftp-server_example_com (/home/foo/.ssh/id_sftp-server_example_com)"
interact
Au login SSH de l’utilisateur foo via la lecture du .bash_profile un agent SSH est démarré puis l’ajout de la passphrase se fait par le script « expect » ~/.ssh/sftp-server_example_com.exp
Ajouter les lignes ci-dessous au fichier /home/foo/.bash_profile
# SSH AGENT for SFTP server : sftp-server.example.com
SSHAGENT=`which ssh-agent`
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi
# ssh-add Passphrase SSH Key ( sftp-server.example.com )
~/.ssh/sftp-server_example_com.exp
# =================================================
A la déconnexion de l’utilisateur foo l’agent SSH est « killé »
Ajouter les lignes ci-dessous au fichier /home/foo/.logout
# Kill SSH-AGENT when logout
if [ ${SSH_AGENT_PID+1} == 1 ]; then
ssh-add -D
ssh-agent -k > /dev/null 2>&1
unset SSH_AGENT_PID
unset SSH_AUTH_SOCK
fi
# =================================================
Test
Agent pid 19109
spawn ssh-add /home/foo/.ssh/id_sftp-server_example_com
Enter passphrase for /home/foo/.ssh/id_sftp-server_example_com:
Identity added: /home/foo/.ssh/id_sftp-server_example_com4 (/home/foo/.ssh/id_sftp-server_example_com)
[foo@node321 ~]$ sftp client@sftp-server.example.com
Connecting to sftp-server.example.com...
sftp>