我知道有一个 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
我相信上面的代码还可以进一步简化。希望这有帮助:)