基于密码的认证在网络盛行的今天,你可能须要或者已经使用了某种密码管理工具来跟踪管理你正在使用的全部密码。有各类各样的在线或离线服务或者软件工具用于完成此类事情,而这些工具因复杂程度、用户界面或者目标环境(如企业或终端用户)的不一样而各不相同。例如,有一些是为终端用户开发基于图形化的密码管理器,如KeePass(X)。我自已一直使用1password,浏览器使用lastpasswd.html
对于那些不想要依赖图形化进行密码管理的用户,最近一直习惯全部的操做在终端实现,因此学习了CLI下管理密码。下文将会讲述如何在命令行下使用 pass来管理密码,这是一个简单的用于命令行管理密码的工具。前端
该密码工具其实是一个shell脚本编写的前端,其中调用了几个其它工具(如gpg,pwgen,git,xsel)来使用OpenGPG管理用户的密码信息。各个密码使用gpg工具进行加密,并存储到本地密码仓库中。密码信息能够经过终端或者自清除的剪贴板工具使用。node
该密码工具至关灵活,而且使用起来及其简单。你能够将每一个密码信息存储到一个OpenGPG保护的普通文本文件,而且将不一样的密码文件分组多个类目中。它支持bash自动补全特性,所以能够很方便地使用TAB键来补全命令或者很长的密码名称。linux
在Debian,Ubuntu或者Linux Mint上安装pass:ios
$ sudo apt-get install pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
复制代码
在Fedora上安装pass:git
$ sudo yum install pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
复制代码
在CentOS上安装pass,首先启用EPEL仓库,而后执行如下命令:github
$ sudo yum install pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
复制代码
在Archlinux上安装pass:shell
$ sudo pac -S pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
复制代码
在Mac上安装passubuntu
$ brew install pass
$ echo "source /usr/local/etc/bash_completion.d/password-store" >> ~/.bashrc
复制代码
注意
:上面的这样作主要是为了在开启终端的时候,加载pass,可能不一样方式下的,脚本文件不一样,使用不一样shell,也要注意。 好比: macvim
youdi@MacbookPro > ~ brew list pass
/usr/local/Cellar/pass/1.7.1/bin/pass
/usr/local/Cellar/pass/1.7.1/etc/bash_completion.d/pass
/usr/local/Cellar/pass/1.7.1/lib/password-store/platform.sh # 须要加载的脚本
/usr/local/Cellar/pass/1.7.1/share/emacs/site-lisp/pass/password-store.el
/usr/local/Cellar/pass/1.7.1/share/fish/vendor_completions.d/pass.fish
/usr/local/Cellar/pass/1.7.1/share/man/man1/pass.1
/usr/local/Cellar/pass/1.7.1/share/pass/ (21 files)
/usr/local/Cellar/pass/1.7.1/share/zsh/site-functions/_pass
复制代码
ubuntu
ubuntu@youdi > ~ dpkg -L pass
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/pass
/usr/share/doc/pass/examples
/usr/share/doc/pass/examples/vim
/usr/share/doc/pass/examples/vim/noplaintext.vim
/usr/share/doc/pass/examples/emacs
/usr/share/doc/pass/examples/emacs/password-store.el
/usr/share/doc/pass/examples/emacs/README.md
/usr/share/doc/pass/examples/emacs/Cask
/usr/share/doc/pass/examples/dmenu
/usr/share/doc/pass/examples/dmenu/README.md
/usr/share/doc/pass/examples/dmenu/passmenu
/usr/share/doc/pass/copyright
/usr/share/doc/pass/changelog.Debian.gz
/usr/share/doc/pass/related-projects.txt
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/pass.1.gz
/usr/share/fish
/usr/share/fish/vendor_completions.d
/usr/share/fish/vendor_completions.d/pass.fish
/usr/share/pass
/usr/share/pass/kedpm2pass.py
/usr/share/pass/keepassx2pass.py
/usr/share/pass/pwsafe2pass.sh
/usr/share/pass/lastpass2pass.rb
/usr/share/pass/kwallet2pass.py
/usr/share/pass/keepass2pass.py
/usr/share/pass/gorilla2pass.rb
/usr/share/pass/revelation2pass.py
/usr/share/pass/fpm2pass.pl
/usr/share/pass/1password2pass.rb
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/pass
/usr/share/zsh
/usr/share/zsh/vendor-completions
/usr/share/zsh/vendor-completions/_pass
/usr/bin
/usr/bin/pass
复制代码
在使用密码工具以前,你须要执行一次初始化步骤,该步骤包括建立一个GPG密钥对(若是你尚未)以及一个本地密码仓库。
首先,经过如下步骤建立一个GPG密钥对(即:公钥/私钥)。若是已经建立了本身的GPG密钥对,能够跳过此步骤。
$ gpg --gen-key
复制代码
执行该步骤,会询问你以下问题。若是你不肯定,能够选择接受默认回答。做为密钥生成部分,你将要为你的密钥建立一个加密口令,这个口令其实是你访问存储在本地密码仓库中的任何密码信息时的主密码。成功建立密钥对后,建立的密钥对会存储在~/.gnupg目录中。
接下来,运行如下命令来初始化本地密码仓库。下面的,输入以前建立密钥对时的关联电子邮件地址。
$ pass init <gpg-id>
复制代码
该命令会在~/.password-store目录中建立一个密码仓库。
要将新的密码信息插入到本地密码仓库中,请遵循如下命令格式:
$ pass insert <password-name>
复制代码
是你定义的专有名称,而且能够分级(如 "finance/tdbank", "online/gmail.com")。在这种状况下,密码信息能够存储到~/.password-store目录下对应的子目录中。
若是你想要分多行插入密码信息,请像如下命令同样使用"-m"选项。以你本身喜欢的任何格式来输入密码信息,而后按Ctrl+D来结束。
$ pass insert <password-name> -m
复制代码
要查看全部存储的密码名称列表,只需输入"pass"命令:
$ pass
复制代码
要访问特定密码列表中的内容,只需使用如下命令:
$ pass <password-name>
复制代码
例如:
$ pass email/gmail.com
复制代码
会要求你输入密码口令来解锁密钥。
若是你想要将密码复制到剪贴板,而不是显示到终端屏幕上,使用如下命令:
$ pass -c email/gmail.com
复制代码
当密码被复制到剪贴板,剪贴板在45秒后会被自动清空。
使用pass命令,你也能够生成一个新的随机密码,该密码可用于任何目的。pass工具将会使用pwgen工具来生成一个好的随机密码。你能够指定密码的长度,或者生成带或不带符号的密码。
例如,要生成一个具备10个字符不带符号的密码,并将它存储到 "email/new_service.com"列表中:
$ pass generate email/new_service.com 10 -n
复制代码
要移除现存的密码信息是很容易的:
$ pass rm email/gmail.com
复制代码
密码存储不会强加任何特定的模式或数据组织类型,由于它只是一个能够包含任意数据的平面文本文件。尽管最多见的状况是每一个条目存储一个密码,但一些高级用户发现他们但愿在密码存储区中存储的不只仅是他们的密码,还存储对秘密问题,网站URL以及其余敏感信息或元数据的回答。因为密码存储没有强加一个本身的方案,你能够选择你本身的组织。有不少可能性。
一种方法是使用pass(--multiline
或-m
in insert
)的多行功能,并将密码自己存储在文件的第一行,以及后续行中的附加信息。例如,Amazon/bookreader
可能看起来像这样:
Yw|ZSNH!}z"6{ym9pI URL: *.amazon.com/* Username: AmazonianChicken@example.com Secret Question 1: What is your childhood best friend's most bizarre superhero fantasy? Oh god, Amazon, it's too awful to say... Phone Support PIN #: 84719 复制代码
*这是做者使用的首选组织方案。*在--clip
/ -c
选项只会复制这样的文件到剪贴板中的第一行,从而容易获取的登陆表单的密码,同时保持在同一个文件的其余信息。
另外一种方法是使用文件夹,并将每一个数据片断存储在该文件夹中的文件中。例如Amazon/bookreader/password
在书目内藏书读者的密码Amazon/bookreader
,而且Amazon/bookreader/secretquestion1
会有一个秘密的问题,而且Amazon/bookreader/sensitivecode
会保存与书籍读者账号有关的其余东西。而另外一种方法多是将密码Amazon/bookreader
和其余数据存储在其中Amazon/bookreader.meta
。甚至另外一种方法多是使用多行,如上所述,但将URL模板放在文件名中,而不是在文件中。
重点是,这里的可能性很是之多,并且还有许多其余组织方案没有在上面提到; 您能够自由选择最适合您工做流程的。
为了便于用户提出各类各样的用途,pass
支持扩展。安装的扩展/usr/lib/password-store/extensions
(或某些特定于发行版的扩展)始终处于启用状态。~/.password-store/EXTENSION.bash
若是PASSWORD_STORE_ENABLE_EXTENSIONS
环境变量为“ true
Read the man page”,则安装的扩展已启用以获取更多详细信息。
社区已经产生了许多这样的扩展:
社区为各类平台组装了使人印象深入的客户端和GUI:
为了从其余(臃肿的)密码管理器的离合器中释放密码数据,各类用户已经想出了最适合他们的不一样的密码存储组织。一些用户提供了脚原本帮助从其余程序导入密码:
小结一下,pass是及其灵活,便于携带,而且更为重要的是,易于使用。对于正在寻找能简单而行之有效地、安全地、而且不依赖图形化管理任何私人信息的工具的人,笔者强烈推荐pass。