Gérer ses mots de passe avec pass

Afin de gérer mes mots de passe et autres données sensibles, j'ai choisi d'utiliser un logiciel spécialisé : pass. En quelques mots, c'est un script bash qui utilise GnuPG pour stocker vos mots de passe de manière chiffrée.

Utilisation de base

Personnellement j'ai tendance à faire un dossier par service et à y mettre mon identifiant dans login, mon mot de passe dans pass et ainsi de suite. Libre à vous de faire autrement. Bref, voici un exemple d'utilisation basique d'utilisation avec un service en ligne classique.

On inscrit notre identifiant pour le site example.com :

$ pass insert example.com/login
Enter password for example.com/login:
Retype password for example.com/login:

On génère un mot de passe de 42 caractères que l'on utilisera sur ce site. J'insiste sur le fait que, non, 42 caractères ce n'est pas trop long. Maintenant que l'on a plus besoin de se souvenir de nos mots de passe, on ne va pas se priver niveau longueur.

$ pass generate example.com/pass 42
The generated password for example.com/pass is:
Xa#-urBzjLWqwv&1ttPI~|~piPY=2_'Qh^A>zlssBG

Ooops, le site nous demande de ne pas mettre de caractères spéciaux, on utilise donc l'option -n pour n'avoir que des caractères alphanumériques :

$ pass generate -n example.com/pass 42
An entry already exists for example.com/pass. Overwrite it? [y/N] y
The generated password for example.com/pass is:
7vTmM1W9wzfFxUTyHiMQP1IWlU9yEHvOU1MEcyGhRk

On peut lister les mots de passe enregistrés avec la sous-commande ls :

$ pass ls example.com
example.com
├── login
└── pass

Lorsque l'on voudra s'identifier, il suffit d'afficher le contenu stocké. Pour les mots de passe on préférera utiliser l'option -c afin de le copier dans le presse papier pendant 45 secondes.

$ pass example.com/login
plop
$ pass -c example.com/pass
Copied example.com/pass to clipboard. Will clear in 45 seconds

Sauvegarder le tout avec git

En fait pass stock chaque mot de passe dans un fichier sur le disque. Les dossiers que vous créez sont également des dossiers sur le disque. Tout est accessible dans ~/.password-store. Du coup, c'est extrêmement simple de versionner le tout avec git, d'autant plus que c'est intégré dans pass.

$ pass git init
Initialized empty Git repository in /home/rodolphe/.password-store/.git/
$ pass git remote add origin ssh://derp@monserveur.example.com/srv/repos/pass.git

Oui, au lieux de vous mettre dans ~/.password-store et d'utiliser directement git, vous pouvez utiliser git comme une sous-commande de pass. Comme ça plus besoin de changer de répertoire. Vous avez bien entendu accès à toutes les sous-commandes de git. Bon à savoir : à chaque ajout/suppression/modification, pass créé un commit. Vous n'avez donc plus qu'a push/pull de temps en temps et le tour est joué.

Bien que les fichiers soient chiffrés et que personne ne puisse en lire le contenu sans posséder votre clé privée, ne vous amusez pas à rendre le dépôt git publique. En effet, le nom même des fichiers et dossiers reste visible, tout le monde serait en mesure de regarder où vous possédez des comptes et autres choses du genre. Méta-données machin tout ça quoi.

Trucs et astuces

Il est possible de stocker des clés secrètes TOTP et de générer les codes à usage unique en passant la clé à un programme spécifique.

$ pass example.com/toto | totp-cli
487463

Pour les sites qui demandent les caractères situés à certaines position, man cut est votre ami :

$ pass example.com/pass | cut -c 1,3,12,21
7TFP

Pour utiliser un mot de passe dans un script shell, rien de plus simple :

#!/bin/sh
example_password="$(pass example.com/pass)"