Pass - prosty manager haseł

Od dawna szukałem prostego, bezpiecznego i przenośnego managera haseł. Nic idealnego niestety nie ma. Keepassa używam z powodzeniem w pracy na Macu, skonfigurowałem go z keepasshttp i wtyczką do firefoksa. Niby mógłbym na linuksie - ale mono, a synchronizację trzeba by zrobić i tak zewnętrznie... Tu z pomocą przyszedł skrypt w bashu napisany prez ZX2C4 o nazwie pass.

Skrypt ten ma bardzo prosty interfejs konsolowy, ale dorobił się GUI w Qt i wtyczki do Firefoksa. Sama idea polega na strukturze katalogów, w której znajdą się zaszyfrowane gpg pliki z hasłami (i nie tylko). Idea jest bardzo prosta Początki? Nie będę tego opisywał, ponieważ na stronie projektu jest chyba wystarczająco jasno opisane co i jak. Ja dodam od siebie parę drobnostek.

Ale jak, za każdym razem muszę wpisywać hasło?! No nie, na szczęście da się to ominąć i zapamiętać hasło do klucza gpg na jakiś czas. Aby tak było musimy dodać do pliku ~/.gnupg/gpg.conf następującą linię:

use-agent

I utworzyć plik ~/.gnupg/gpg-agent.conf o zawartości

pinentry-program /usr/bin/pinentry-gtk-2
no-grab
default-cache-ttl 3600

Pozwoli to na zapamiętanie hasła do klucza gpg przez godzinę. Do pełni szczęścia wystarczy dodać tylko autostart gpg-agenta, np. w .xinitrc

eval $(gpg-agent --daemon)

No fajnie, nie muszę ciągle wpisywać hasła by odczytać hasło… ale miało być pięknie, a nie jest! Dopiero będzie - jak użyjemy do tego jeszcze gita. Musimy zrobić pass git init. Od teraz każde dodane, zmienione, usunięte hasło będzie miało swój commit. Tylko to wciąż nie to… Miała być synchronizacja! No to już mówię, na serwerze:

cd ~
git --bare init .password-store.git

I teraz, na komputerze robimy:

git clone user@example.com:.password-store.git ~/.password-store

I wystarczy tylko używać

pass git pull #aby ściągnąć
pass git push #aby wysłać

A jeśli trzeba nam automagii do wysyłania i ściągania haseł - wystarczy wrzucić to do crona i odpalać co jakiś czas. W każdym razie - to jest git, więc w razie czego nic nie tracimy, zawsze będzie gdzieś commit ze zmianą.