如何获取 gpg-agent 中剩余的密码缓存持续时间?

如何获取 gpg-agent 中剩余的密码缓存持续时间?

我知道有一个 gpg-agent 配置来设置我们可以将密码缓存到 gpg-agent 中多长时间。该设置称为--max-cache-ttl n

但是,当密码在 gpg-agent 中缓存(例如 10 秒)时,如何获取当前缓存持续时间(例如距离过期还剩多少秒)?是否有一个查询选项可以直接从 gpg-agent 获取?

答案1

不确定 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)

现在你有了两个重要的变量,你可以使用这两个变量来获取过期日期:

# 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

我相信上面的代码还可以进一步简化。希望这有帮助:)

相关内容