blog:offlineimap_et_password-store

OfflineIMAP et password store

Pour utiliser confortablement gpg(1), j'utilise un agent et un « pinentry » (programme pour saisir la passphrase d'une clef).

  1. pour que gpg(1) utilise un agent pour gérer l'accès aux clefs ie. utilise gpg-agent(1), régler dans ${HOME}/.gnupg/gpg.conf :
    /.gnupg/gpg.conf
    use-agent
  2. 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.

  • blog/offlineimap_et_password-store.txt
  • Dernière modification : 2015/09/19 01:12
  • de pc