如何在CLI上管理密碼

jackson.liang發表於2018-06-14

如何在CLI上管理密碼

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

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

該密碼工具實際上是一個shell指令碼編寫的前端,其中呼叫了幾個其它工具(如gpg,pwgen,git,xsel)來使用OpenGPG管理使用者的密碼資訊。各個密碼使用gpg工具進行加密,並儲存到本地密碼倉庫中。密碼資訊可以通過終端或者自清除的剪貼簿工具使用。

該密碼工具相當靈活,並且使用起來及其簡單。你可以將每個密碼資訊儲存到一個OpenGPG保護的普通文字檔案,並且將不同的密碼檔案分組多個類目中。它支援bash自動補全特性,因此可以很方便地使用TAB鍵來補全命令或者很長的密碼名稱。

在Linux上安裝pass

在Debian,Ubuntu或者Linux Mint上安裝pass:

$ sudo apt-get install pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
複製程式碼

在Fedora上安裝pass:

$ sudo yum install pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
複製程式碼

在CentOS上安裝pass,首先啟用EPEL倉庫,然後執行以下命令:

$ sudo yum install pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
複製程式碼

在Archlinux上安裝pass:

$ sudo pac -S pass
$ echo "source /etc/bash_completion.d/password-store" >> ~/.bashrc
複製程式碼

在Mac上安裝pass

$ brew install pass
$ echo "source /usr/local/etc/bash_completion.d/password-store" >> ~/.bashrc
複製程式碼

注意:上面的這樣做主要是為了在開啟終端的時候,載入pass,可能不同方式下的,指令碼檔案不同,使用不同shell,也要注意。 比如: mac

 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目錄中。

如何在CLI上管理密碼

接下來,執行以下命令來初始化本地密碼倉庫。下面的,輸入之前建立金鑰對時的關聯電子郵件地址。

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

如何在CLI上管理密碼

從密碼倉庫中取回密碼資訊

要訪問特定密碼列表中的內容,只需使用以下命令:

$ 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。

相關文章