While I cannot wait to fire my last PGP into the Sun, my GnuPG and Yubikey combined with gopass is a pretty useful combination. The important parts here are gopass itself, as a way of managing passwords in a git repository while keeping them encrypted, and the use of Yubikey to be the thing which actually holds the key material to decrypt those passwords. I can have my password repository living off in my AFS homedirs on machines, keep them encrypted, and require a physical object (the Yubikey) and a PIN to decrypt things, a process which works because I can perform all crypto operations back to a local agent via a socket forwarded over ssh.
One of the things I’ve wanted to do for a while is continue to have
require a password, but have that password be something in my gopass repository.
My initial attempts focused on the
-S option to
sudo, reading the password
stdin. I couldn’t get that to work no matter what I tried, but then came
-A option to
-A option triggers the use of “askpass”, where
sudo will execute a
program which is expected to read/obtain the user’s password and then print
it to stdout. With this you can tie together a little function which asks
for a path in your pass repository (or defaults to using the one set in a
specific environment variable) and then spits it to stdout. Normally you
don’t want to do this, but since
sudo is running this in a subprocess
it gets captured by it and uses that password to attempt to authenticate.
See it in my one-offs repository