如何在CLI上管理密碼

基於密碼的認證在網絡盛行的今天,你可能須要或者已經使用了某種密碼管理工具來跟蹤管理你正在使用的全部密碼。有各類各樣的在線或離線服務或者軟件工具用於完成此類事情,而這些工具因複雜程度、用戶界面或者目標環境(如企業或終端用戶)的不一樣而各不相同。例如,有一些是爲終端用戶開發基於圖形化的密碼管理器,如KeePass(X)。我自已一直使用1password,瀏覽器使用lastpasswd.html

對於那些不想要依賴圖形化進行密碼管理的用戶,最近一直習慣全部的操做在終端實現,因此學習了CLI下管理密碼。下文將會講述如何在命令行下使用 pass來管理密碼,這是一個簡單的用於命令行管理密碼的工具前端

該密碼工具其實是一個shell腳本編寫的前端,其中調用了幾個其它工具(如gpg,pwgen,git,xsel)來使用OpenGPG管理用戶的密碼信息。各個密碼使用gpg工具進行加密,並存儲到本地密碼倉庫中。密碼信息能夠經過終端或者自清除的剪貼板工具使用。node

該密碼工具至關靈活,而且使用起來及其簡單。你能夠將每一個密碼信息存儲到一個OpenGPG保護的普通文本文件,而且將不一樣的密碼文件分組多個類目中。它支持bash自動補全特性,所以能夠很方便地使用TAB鍵來補全命令或者很長的密碼名稱。linux

在Linux上安裝pass

在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管理密碼

插入新密碼信息

要將新的密碼信息插入到本地密碼倉庫中,請遵循如下命令格式:

$ 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
複製代碼

數據組織

用戶名,密碼,PIN,網站,元數據等等

密碼存儲不會強加任何特定的模式或數據組織類型,由於它只是一個能夠包含任意數據的平面文本文件。儘管最多見的狀況是每一個條目存儲一個密碼,但一些高級用戶發現他們但願在密碼存儲區中存儲的不只僅是他們的密碼,還存儲對祕密問題,網站URL以及其餘敏感信息或元數據的回答。因爲密碼存儲沒有強加一個本身的方案,你能夠選擇你本身的組織。有不少可能性。

一種方法是使用pass(--multiline-min 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的擴展

爲了便於用戶提出各類各樣的用途,pass支持擴展。安裝的擴展/usr/lib/password-store/extensions(或某些特定於發行版的擴展)始終處於啓用狀態。~/.password-store/EXTENSION.bash若是PASSWORD_STORE_ENABLE_EXTENSIONS環境變量爲「 trueRead the man page」,則安裝的擴展已啓用以獲取更多詳細信息。

社區已經產生了許多這樣的擴展:

兼容的客戶端

社區爲各類平臺組裝了使人印象深入的客戶端和GUI:

遷移到 pass

爲了從其餘(臃腫的)密碼管理器的離合器中釋放密碼數據,各類用戶已經想出了最適合他們的不一樣的密碼存儲組織。一些用戶提供了腳原本幫助從其餘程序導入密碼:

小結一下,pass是及其靈活,便於攜帶,而且更爲重要的是,易於使用。對於正在尋找能簡單而行之有效地、安全地、而且不依賴圖形化管理任何私人信息的工具的人,筆者強烈推薦pass。

相關文章
相關標籤/搜索