Vous avez votre connection distante (ssh) configurée, vous avez mis en place un système d'identification par clé (pubkey) pour ne pas avoir à taper votre mot de passe à chaque connexion, clé publique protégée par une passphrase.
C'est bien, bravo.
Mais quel est l'intérêt de taper à chaque fois une passphrase plutôt qu'un mot de passe ? ceci a déjà été détaillé ailleurs, mais revenons un peu dessus : il existe des outils qui vous demande votre passphrase lors de votre connexion et qui s'en souvienne pendant toute la durée de votre connexion, et parfois même après votre déconnexion, et tant que l'ordinateur ne redémarre pas, ils “tapent” vos passphrases à votre place. Keychain
sert à ça.
Vous allez me dire que des outils inclus dans le paquet openssh existent déjà, comme ssh-agent
et qu'ils font très bien leur travail, alors pourquoi un autre outil ? Et moi je vous répondrais “Oui, mais ..”
Si vous souhaitez utiliser une connexion distante dans un script, par exemple une sauvegarde à base de rsync, sftp ou autre… lancée par cron, bah voilà, votre bel outil ssh-agent
ne marche plus. Pourquoi le monde est-il si injuste ?
Il semblerait que ce soit des histoires d'environnement, mais je vous avoue que je ne connais pas tous les détails.
Il nous faut donc trouver une solution qui permette à nos scripts lancés par cron d'avoir accès à cette connexion par clé publique déjà déverrouillée par ssh-agent
ou autre. Keychain
sert à ça. (Vous voyez, on finit par y arriver :p )
Vous lancez keychain
une 1ère fois, il lance ssh-agent
et vous demande vos passphrases, il enregistre “l'environnement” (pid ?) de ssh-agent
dans un dossier à lui ~/.keychain/
, et dans vos scripts vous appelez keychain
qui fait le lien avec ssh-agent
et vos clé sont utilisables.
Sous Debian, keychain est un paquet que l'on peut facilement installer via aptitude.
Sous CentOS, je ne l'ai pas encore installé, mais il semblerait qu'il ne soit pas présent dans les dépots de base, ni ceux d'EPEL, ni ceux de remi…
J'ai trouvé quelque part une recommandation de lancer keychain
systématiquement lorsqu'on se connecte en console. C'est pratique et ça ne coûte pas grand chose. Alors zou, c'est parti :
dans votre fichier ~/.bashrc
, on rajoute les lignes suivantes :
/usr/bin/keychain $HOME/.ssh/votre_super_cle_privée source $HOME/.keychain/$HOSTNAME-sh
Comme vous avez pu le remarquer, il convient d'avoir un dossier ~/.keychain
, alors créons le et protégons le
mkdir ~/.keychain chmod 700 ~./keychain
Dans vos scripts, il suffit de rajouter les lignes suivantes :
/usr/bin/keychain source $HOME/.keychain/votre_hostname-sh
Et pouf, ça fait des chocapic ! ou presque…
Certains vous dirait qu'on peut récupérer le HOSTNAME avec une commande, le stocker dans une variable, et le réutiliser… Ok pourquoi pas. L'avantage ? vous n'avez qu'à copier les lignes suivantes et les mettre dans votre script, y'a plus besoin de modifier quoi que ce soit (enfin, j'espère )
/usr/bin/keychain hostname=`uname -n` source $HOME/.keychain/$hostname-sh