Outils pour utilisateurs

Outils du site


Panneau latéral

keychain

Keychain, un gestionnaire de clé

C'est quoi ?

Situation initiale

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 ..”

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 )

Principe de fonctionnement

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.

Installation

Paquet

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…

Configuration

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

Utilisation

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…

Optimisation

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
keychain.txt · Dernière modification: 2018/10/13 20:32 (modification externe)