Ik heb jarenlang KeePass gebruikt. Daarna 1Password. Daarna Bitwarden. Allemaal prima tools, maar elk ervan voelde als te veel. Te veel UI, te veel features, te veel gedoe om ze goed in mijn workflow te krijgen. Elke keer dat ik een wachtwoord nodig had stapte ik over een app-grens heen, en die kleine onderbreking telde op.
Toen vond ik pass. Het doet precies wat de naam belooft: wachtwoorden opslaan. Ik neem je mee zoals ik het zelf leerde, te beginnen met het ene commando dat me overhaalde, en daarna laag voor laag tot je mijn volledige setup ziet.
Wat is pass?
Pass noemt zichzelf de “standard unix password manager.” Onder de motorkap is het een shell script van zo’n 700 regels dat elk wachtwoord opslaat als een GPG-versleuteld bestand in een directory. Geen database. Geen proprietary format. Geen cloud sync eraan geplakt. Het geheel is klein genoeg om de broncode op een middag door te lezen, en dat telt voor mij: als er iets stuk gaat, wil ik kunnen achterhalen waarom.
~/.password-store/
├── email/
│ ├── gmail.gpg
│ └── protonmail.gpg
├── social/
│ └── github.gpg
└── work/
├── gitlab.gpg
└── jira.gpg
Elk .gpg bestand is een versleuteld tekstbestand met je wachtwoord en, als je wilt, wat extra info. De directory structuur is je organisatie. Dat is het hele mentale model.
De simpelste versie: in vijf minuten werkend
Installatie
# macOS
brew install pass gnupg
# Debian/Ubuntu
sudo apt install pass gnupg
# Arch
sudo pacman -S pass gnupg
Je hebt een GPG key nodig
Pass gebruikt GPG voor encryptie, dus je hebt een key nodig. Als je er nog geen hebt:
gpg --full-generate-key
Kies RSA, 4096 bits, en vul je naam en email in. Onthoud je passphrase. Die heb je nodig bij elke ontsleuteling, en niemand kan ’m voor je terughalen.
Password store initialiseren
# Gebruik je GPG key ID of email
pass init "tom@example.com"
Dit maakt ~/.password-store/ aan met een .gpg-id bestand dat vastlegt welke GPG key in gebruik is.
Je eerste wachtwoord
# Genereer een nieuw wachtwoord
pass generate email/gmail 24
# Of voeg een bestaand wachtwoord toe
pass insert social/github
Dat is de hele setup. Je hebt nu een werkende password manager.
Wachtwoord ophalen
# Toon wachtwoord in terminal
pass email/gmail
# Kopieer naar clipboard (verdwijnt na 45 sec)
pass -c email/gmail
Dit was het moment dat het klikte. Geen app om te starten, geen extensie die wakker moet worden. Eén commando en het wachtwoord staat in mijn clipboard.
Eerste laag: waarom dit in mijn workflow past
Pass schuift in een terminal-first workflow zonder me te vragen die te verlaten. Als ik een werkwachtwoord nodig heb:
pass -c work/gitlab
Klaar. Het staat dertig seconden in mijn clipboard en is daarna weg.
Omdat pass gewoon bestanden in een directory is, krijg je een paar dingen gratis mee:
- Het is doorzoekbaar:
pass find gitlabof gewoonls ~/.password-store/ - Het is scriptbaar:
pass show -c $(pass find jira | head -1) - Het integreert met alles: dmenu, rofi, fzf, Alfred, je eigen scripts
Een .gpg bestand kan meer bevatten dan een wachtwoord. De conventie is simpel: de eerste regel is het wachtwoord, alles daarna is metadata.
pass edit email/gmail
SuperSecurePassword123!
---
username: tom@gmail.com
url: https://mail.google.com
otp: otpauth://totp/Gmail:tom@gmail.com?secret=JBSWY3DPEHPK3PXP
notes: recovery email is backup@proton.me
Je kunt zelfs TOTP (2FA) codes er rechtstreeks uit halen:
# Met pass-otp extensie
pass otp email/gmail
Tweede laag: git sync, het deel dat de doorslag gaf
Pass heeft ingebouwde git support, en dit is waarom ik gestopt ben met naar andere password managers kijken.
# Initialiseer git repo
pass git init
# Elke wijziging wordt automatisch gecommit
pass generate new/password 20
# → [master 1a2b3c4] Add generated password for new/password.
# Push naar remote
pass git push
Je password store is nu een git repository. Dat geeft je:
- Automatische backups naar je git remote
- Sync tussen machines met gewoon
pass git pull - Versie historie van elk wachtwoord
- Conflict resolution als je hetzelfde op twee machines wijzigt
De mijne staat in een private GitLab repo. Een nieuwe machine opzetten is één clone:
git clone git@gitlab.com:tom/password-store.git ~/.password-store
Elk wachtwoord, beschikbaar. Er zit geen vendor in die pull, en dat is precies het punt.
Browserintegratie
“Maar ik wil toch auto-fill in mijn browser.”
Dat kan. Er zijn extensies voor Firefox en Chrome:
- Browserpass - native messaging, werkt goed
- passff - Firefox-only, ook solide
Browserpass leest je password store, matcht de URL met je directory structuur, en vult het formulier in. Het werkt beter dan ik verwachtte.
~/.password-store/
├── github.com/
│ └── tom.gpg # auto-matched op github.com
├── gitlab.com/
│ └── work.gpg
└── mail.google.com/
└── personal.gpg
Fuzzy finding met fzf
Dit is mijn dagelijkse driver. Een klein script:
#!/bin/bash
# passfzf - fuzzy find and copy password
password=$(find ~/.password-store -name "*.gpg" | \
sed 's|.*/\.password-store/||; s|\.gpg$||' | \
fzf --height 40% --reverse)
[[ -n "$password" ]] && pass -c "$password"
Bind het aan een hotkey en je hebt instant lookup met fuzzy matching. Werk je liever in rofi, dan doet rofi-pass hetzelfde:
rofi-pass
Geavanceerde patronen
Multi-key encryptie
Wachtwoorden delen met een team? Pass ondersteunt meerdere GPG keys:
pass init key1@example.com key2@example.com
Nu kunnen beide keys alles ontsleutelen. Je kunt ook per directory andere keys instellen:
# Alleen jij hebt toegang tot personal/
echo "your-key-id" > ~/.password-store/personal/.gpg-id
# Het hele team heeft toegang tot shared/
echo -e "key1\nkey2\nkey3" > ~/.password-store/shared/.gpg-id
pass init
Extensies die de moeite waard zijn
Pass heeft een extensie systeem. De extensies waar ik naar grijp:
pass-otp voor TOTP/HOTP support:
# Voeg OTP toe
pass otp insert email/gmail
# Plak de otpauth:// URL
# Genereer code
pass otp email/gmail
# → 482193
pass-tomb wikkelt je hele store in een Tomb container:
pass tomb open
# doe je ding
pass tomb close
Dat voegt een laag toe als iemand fysieke toegang tot je machine heeft.
pass-update voor bulk rotatie:
pass update -l 32 work/*
Het echte nadeel: key management
Hier is de eerlijke trade-off. Pass is simpel juist omdat het op GPG leunt, en GPG key management is allesbehalve simpel. Dit is de prijs van soevereiniteit, en doen alsof dat niet zo is zou oneerlijk zijn.
Je GPG key is kritiek
Verlies je je GPG private key, dan ben je elk wachtwoord kwijt. Permanent. Geen “forgot password” link, geen support desk die je eruit graaft.
Dus:
- Backup je GPG key op meer dan één plek
- Onthoud je passphrase (op papier in een kluis is een redelijke zet)
- Overweeg een hardware key zoals een YubiKey
GPG kan frustrerend zijn
GPG is krachtig en notoir onvriendelijk. Je komt fouten tegen zoals deze:
gpg: decryption failed: No secret key
gpg: problem with the agent: No pinentry
gpg: public key not found
Als je GPG niet eerder gebruikt hebt, is de leercurve steil. Pinentry popups die weigeren te verschijnen, agents die vastlopen, keys die zoek raken. Ik heb er avonden aan verloren, en dat zeg ik je vooraf.
Geen ingebouwde mobile app
Er is geen officiële pass app. Third-party opties bestaan:
- Android: Password Store - werkt goed, synct via git
- iOS: Pass for iOS - ook git sync
Geen van beide is zo gepolijst als 1Password of Bitwarden op mobile. Je moet eerst git credentials configureren en je GPG key importeren, en dat kost tijd.
Geen password sharing via link
“Deel dit wachtwoord met een collega” is geen feature. Multi-key encryptie werkt, maar vereist dat iedereen GPG keys heeft. Voor een snelle share met iemand zonder technische achtergrond is pass de verkeerde tool.
Sync conflicts kunnen lastig zijn
Git sync is geweldig tot je hetzelfde wachtwoord op twee machines wijzigt en een merge conflict krijgt in een versleuteld bestand. Dat oplossen is geen pretje. In de praktijk gebeurt het zelden als je pass git pull doet voordat je wijzigingen maakt, maar het kan.
Wanneer pass de juiste keuze is
Pass is ideaal als:
- Je comfortabel bent in de terminal
- Je al GPG gebruikt, of bereid bent het te leren
- Je controle wilt over je data, zonder cloud tenzij jij die kiest
- Je het wilt verweven met scripts en automation
- Je iets simpels en auditeerbaars wilt (ongeveer 700 regels bash)
Wanneer je iets anders moet kiezen
Grijp naar Bitwarden of 1Password als:
- Je wachtwoorden deelt met mensen zonder technische achtergrond (familie, collega’s zonder GPG)
- Je een gepolijste mobile experience wilt zonder setup
- Je liever geen GPG key management doet
- Je organisatie een specifieke password manager voorschrijft voor compliance
Het volledige plaatje: mijn setup
Zo draai ik het echt, voortbouwend op alles hierboven:
# ~/.zshrc
export PASSWORD_STORE_DIR="$HOME/.password-store"
export PASSWORD_STORE_CLIP_TIME=30
# Fuzzy find alias
alias p='passfzf'
# Quick copy
alias pc='pass -c'
De store staat in een private GitLab repo. Ik sync tussen laptop, desktop en telefoon met git. De GPG key zit op een YubiKey, met een backup op een air-gapped machine.
Is het meer setup dan Bitwarden? Ja. Die trade-off koopt me een workflow die de terminal nooit verlaat, volledige controle over mijn data, en geen vendor die volgend kwartaal de prijzen kan verhogen of de boel kan verkopen.
Afronding
Pass past bij mensen die van de Unix filosofie houden: doe één ding, doe het goed, integreer met de rest. De GPG afhankelijkheid alleen al sluit veel mensen uit, en dat zeg ik liever ronduit dan dat ik het aan de verkeerde doelgroep verkoop.
Maar als je een terminal-first workflow hebt, controle wilt over je data, en bereid bent de GPG leercurve te beklimmen, dan is pass een verademing na elke overengineered manager die ik daarvoor probeerde. Ongeveer 700 regels bash, bestanden in een directory, git voor sync. Het doet zijn werk en gaat aan de kant.
Soms is simpel echt gewoon beter.
Resources:
- passwordstore.org - officiële site
- pass git repo - broncode
- Browserpass - browser extensie
- Password Store (Android) - Android app
