Bash

如何獲取 gpg-agent 中留下的密碼片語記憶體持續時間?

  • September 5, 2021

我知道有一個 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

我相信上面的程式碼可以進一步簡化。希望這有幫助:)

引用自:https://unix.stackexchange.com/questions/608715