自動開啟 keepassxc 並解鎖密碼庫
我的密碼都存在 keepassxc 並用 syncthing 在我每台電腦同步,這很好用,不過 keepassxc 比起把密碼交給瀏覽器管理有一個比較不方便的地方是得另外安裝瀏覽器擴充套件才能存取 keepassxc 的密碼檔案,而且還要 keepassxc 程式開著才偵測的到,這個套件沒辦法自己打開本機的 keepassxc 程式,我得自己開,打開以後還得自己輸入一次資料庫本身的密碼,我的電腦沒有驗證指紋的感測器,只能乖乖打字,有點小麻煩。
為了讓我打密碼能打的更快,我決定做點額外的設定,先來一步步來拆解要做的事,讓這些事可以用 bash script 組合起來就成功了。
- 使用命令開啟 keepassxc 的某個資料庫
- 自動輸入密碼
- 更快的啟動
請自己安裝適合自己發行版的 keepassxc ,我接下來講的方法應該不適用 appimage 版本的 keepassxc ,因為在第一步使用打開 keepassxc 的指令就不存在了。
使用命令開啟 keepassxc 的某個資料庫
使用以下指令可以打開某一個資料庫,按下 Enter 後,會像下 sudo
指令一樣提示輸入密碼(不會顯示在螢幕上)
keepassxc --pw-stdin /path/to/your/db.kdbx
自動輸入密碼
其實也就是在上面那條指令用 pipline 送進來密碼就行了,你可以用 echo 試試看,不過把資料庫密碼這樣直接放在指令參數有點蠢,要來點別的方法。可以把密碼存在 secret-tool 讓這個程式以密文儲存,再用指令指令哪個密碼吐出來給後面的 keepassxc 當成參數。
secret-tool
以防你不知道 secret-tool 怎麼用,這裡給你範例,他的邏輯就是要提供成對的 key 和 value 來找到對應的密碼,key-value 最好要有意義,因為這就是讓你方便記憶用的。
$ tldr secret-tool
secret-tool
Store and retrieve passwords, part of the `libsecret` package.
Communicates with Freedesktop secret service implementations such as `gnome-keyring`.
More information: https://gnome.pages.gitlab.gnome.org/libsecret/.
- Store a secret with an optional label:
secret-tool store --label=label key value
- Retrieve a secret:
secret-tool lookup key key
- Get more information about a secret:
secret-tool search key key
- Delete a stored secret:
secret-tool clear key key
範例:
secret-tool store --label="GitHub Token" service github user nicky
這裡的 service=github 和 user=nicky 就是 key-value 對
secret-tool lookup service github user nicky
也就是說,你可以預先使用 secret-tool store
設定儲存 keepassxc 資料庫的密碼,然後再用 loockpu 把密碼單獨輸出
$ secret-tool store --label="keepassxc web service token" service keepassxc
Password:
$ secret-tool lookup service keepassxc
我設定了一個 service:keepassxc 的鍵值,之後用以下指令會比用 echo 還要安全的自動登入,你的密碼只有 keepassxc 會收到
secret-tool lookup service keepassxc | keepassxc --pw-stdin /path/to/your/db.kdbx
更快的啟動
基本上,愈快愈不安全,有指令能自動打開 kdbx 檔我已經覺得很方便了。 不要想著用 systemd 在使用者登入後做這種事,我也不會這麼幹,我才不想有其他人一打開我的電腦就看到我的 keepassxc 跳出來把我所有網頁服務的密碼都送他。我最多能接受 alias ,你可以把上面那串縮寫成比較短的命令,但我才不想示範這個,要是大家都看我的 blog 複製貼上都用同樣的 alias 會很好笑,在 .bashrc 用 vim 搜尋一下也是破功。
我建議把啟動腳本的 key value 挖空變成 .sh 放在 /usr/local/bin/,這樣要偷你的密碼至少還要猜一下你的鍵值(或是翻你的 history 指令紀錄),覺得密碼不是正常單字很難打,才打幾個單字而已,不要那麼懶行不行?
#!/bin/bash
secret-tool lookup ${1} ${2} | keepassxc --pw-stdin /home/iach526/Sync/Rito/webservie.kdbx
不要紀錄 history 的方式
其實要也是可以讓人翻不到 history 的,你要在 CLI 設定好環境變數 export HISTCONTROL=ignoreboth
就可以不要紀錄空格開頭的指令,我會把 export 放在 ~/.bashrc
裡面每次打開終端都自動套用這個設定。