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

위의 코드는 더욱 단순화될 수 있다고 생각합니다. 도움이 되었기를 바랍니다 :)

관련 정보