Bash
如何獲取 gpg-agent 中留下的密碼片語記憶體持續時間?
我知道有一個 gpg-agent 配置來設置我們可以將密碼記憶體到 gpg-agent 中的時間。該設置稱為
--max-cache-ttl n
但是,當密碼片語在 gpg-agent 中記憶體例如 10 秒時,我如何獲取目前記憶體持續時間,例如距離過期還有多少秒?有沒有可以直接從 gpg-agent 獲取的查詢選項?
不確定 gpg-agent 具有的內置功能。我認為這是不可能的,但我展示了一個技巧,你可以如何獲得剩餘的記憶體持續時間:
第一條規則:當您在 gpg-agent 中記憶體密碼時,您首先將日期儲存在 unix 時間戳中作為配置文件中的變數:
GPG_MY_CONFIG="~/.gnupg/my-gpg.conf" function set_config() { sudo sed -i "s/^\($1\s*=\s*\).*\$/\1$2/" $GPG_MY_CONFIG } echo "date_cached=$(date +%s)" | sudo tee --append $GPG_MY_CONFIG # Now you got the following date (with unix timestamp) inside my-gpg.conf like below: # date_cached=1599710839 # When you cached a new password, then run this code to update new date in unix timestamp: # set_config date_cached "$(date +%s)"
最好從 gpg-agent.conf 文件中獲取目前的 –max-cache-ttl n 值,這樣我們就可以查詢這個:
# ~/.gnupg/gpg-agent.conf allow-preset-passphrase default-cache-ttl 10 max-cache-ttl 10
首先,讀取設置的 max-cache-ttl 值並將其保存在一個變數中,
expired_in_second
如下所示:# location of gpg config file GPG_CONFIG_FILE="~/.gnupg/gpg-agent.conf" # read the config file for value max-cache-ttl expired_in_second=$(grep -oP 'max-cache-ttl\s*\K\d+' $GPG_CONFIG_FILE)
所以現在你有 2 個重要的變數,你可以通過使用這 2 個變數來獲得過期日期:
# First source the config file: source $GPG_MY_CONFIG # expired_date = date_cached_previously + expired_duration (from max-cache-ttl) expired_date=$(date -d "(date -d @${date_cached}) + $expired_in_second seconds")
並獲得剩餘的持續時間,您可以使用它(將過期日期與目前時間進行比較):
# second_left = expired_date - current_date second_left="$(( $(date -d "$expired_date" "+%s") - $(date +%s) ))" echo "$second_left seconds remaining before password is going to be expired"
輸出:
10 seconds remaining before password is going to be expired
我相信上面的程式碼可以進一步簡化。希望這有幫助:)