unixadmin.free.fr Handy Unix Plumbing Tips and Tricks

4juil/19Off

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

# yum install expect

Générer une passphase SSH de 24 caractères

# base64 /dev/urandom | tr -d "/+" | dd bs="24" count=1 status=none | xargs echo;
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)

$ su – foo

$ 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

Host *
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)

#!/usr/bin/expect -f
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

[root@node321 ]# su - foo
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>
Taggé comme: Commentaires
Commentaires () Trackbacks (0)

Désolé, le formulaire de commentaire est fermé pour le moment

Trackbacks are disabled.