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)

これで、有効期限を取得するために使用できる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

上記のコードはさらに簡素化できると思います。役に立ったことを願っています:)

おすすめ記事