Skip to content

Instantly share code, notes, and snippets.

@Jan69
Last active December 12, 2021 23:48
Show Gist options
  • Save Jan69/facb130bc938ffd5ec1b51ff964406c1 to your computer and use it in GitHub Desktop.
Save Jan69/facb130bc938ffd5ec1b51ff964406c1 to your computer and use it in GitHub Desktop.
simple unix password manager in shell script, alternative to passwordstore.org
#!/bin/sh
# pusswordstore - jan6's simple, *nix password manager
# name comes from combining "pus" with "passwordstore", as it's inspired from passwordstore.org, but without the unneeded complexity
# should work with any posix shell, in any posix-ish environment, with any encryption tool
# en-/decryption wrapper
# use whatever tool you want, gpg, scrypt, age, openssl enc, you name it
puss_crypt(){
case "$1" in
("-e") # encryption, $2 is the filename to encrypt, encrypted file should be same as original filename
# you most likely need an intermediary file, else you'll corrupt or trunctate it (unless you read into memory first)
scrypt enc "$2" >"$2.new" &&
cat "$2.new" >"$2" &&
rm -f "$2.new"
;;
("-d") #decryption, print to stdout
scrypt dec "$2"
;;
("-c") #decryption, non-stdout, "copy to clipboard" or similar
puss_crypt "$@" | xclip
;;
esac;
}
puss(){
puss_dir="${puss_dir:-~/.pusswordstore}";
mkdir -p "$puss_dir";
pw="$puss_dir/$2";
case "$1" in
("add") read -r i;echo $i >"$pw"&&
puss_crypt -e "$pw"
;;
("del") rm "$pw" ;;
("edit") t="$(mktemp)";
cp -p "$pw" "$t";
puss_crypt -d "$pw" >"$t";
"${EDITOR:-vi}" "$t" &&
puss_crypt -e "$t";
mv "$t" "$pw"
;;
("read") puss_crypt -d "pw" ;;
(""|"ls"|"list") find "$puss_dir"|
sed -e "s|^$puss_dir||" \
-e "/^\$/d"
;;
("--help"|"-h") echo "usage: $0 add password | del password | edit password | [read] password | list" ;;
(*) puss_crypt -d "$puss_dir/$1" ;;
esac;
}
puss "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment