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 gitlab of gewoon ls ~/.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 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:

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.

“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: