OfflineIMAP et password store
Pour utiliser confortablement gpg(1)
, j'utilise un agent et un « pinentry » (programme pour saisir la passphrase d'une clef).
- pour que
gpg(1)
utilise un agent pour gérer l'accès aux clefs ie. utilisegpg-agent(1)
, régler dans${HOME}/.gnupg/gpg.conf
:- /.gnupg/gpg.conf
use-agent
- pour que l'agent demande la passphrase d'une clef via un programme « pinentry », régler l'option
pinentry-program
pour indiquer le chemin vers le programme de votre choix dans${HOME}/.gnupg/gpg-agent.conf
:- ~/.gnupg/gpg-agent.conf
pinentry-program /usr/bin/pinentry-curses
Sur Mac OS X, si on utilise les GPGTools, indiquer : /usr/local/MacGPG2/libexec/pinentry-mac.app/Contents/MacOS/pinentry-mac
.
password store est un gestionnaire de mots de passe qui repose sur Git et GnuPG. Chaque mot de passe (en fait, ce que vous voulez) est enregistré et versionné dans un fichier chiffré avec GnuPG.
J'ai l'habitude d'avoir mon dépôt « personnel » dans : ${HOME}/usr/perso/repositories/$(whoami)
; quant à password store, plutôt que de le stocker dans un dépôt à part, il est dans ce même dépôt, dans secrets/password-store/
. Ça fonctionne avec les variables d'environnement :
export PASSWORD_STORE_DIR=${HOME}/usr/perso/repositories/$(whoami)/secrets/password-store export PASSWORD_STORE_GIT=${HOME}/usr/perso/repositories/$(whoami)
Dans ce gestionnaire de mots de passe, parmi beaucoup d'autres, j'ai enregistré le mot de passe de mon serveur de mails :
$ pass show mailserver/account ...mon mot de passe qui roxe du poney...
OfflineIMAP me permet de synchroniser mes comptes de messagerie (il existe autre chose qu'IMAP ?). Plutôt que de mettre le mot de passe en clair ou d'utiliser Keychain.app comme le suggère Steve Losh, adaptons son script comme suit :
- offlineimap.py
#!/usr/bin/env python2.7 import re, subprocess def get_passwordstore(item=None): params = { 'item': item, } command = "/opt/local/bin/pass show %(item)s" %params output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT).rstrip() return output
puis appelons-le :
- .offlineimaprc
remotepasseval = get_passwordstore(item='mailserver/account')
Et voilà, offlineimap(1)
lance pass(1)
qui appelle gpg(1)
pour accéder au mot de passe. gpg-agent(1)
et son « pinentry » font le reste.