GPG로 서명을 확인하는 스크립트

GPG로 서명을 확인하는 스크립트

서명된 파일을 GPG에 공급하면 "서명이 양호합니다" 메시지가 출력되고 일반 텍스트가 저장됩니다.

[gh403@shillig-arch ~]$ gpg test.gpg 
gpg: Signature made Thu Nov  1 14:19:08 2012 CDT using RSA key ID D1FEC5F4
gpg: Good signature from "gh403 <gh403@***********>"

그리고 그 출력을 보고 예, gh403이 여기에 서명했고 예, 서명이 양호하다는 것을 확인할 수 있습니다.

내가 할 수 있기를 원하는 것은 이 동작을 스크립트로 작성하는 것입니다. 특히 서명이 양호한지 확인하는 스크립트가 필요합니다.그리고서명된 키에 특정 ID가 있는지 확인합니다.

이를 수행하기 위한 일반 GPG 호출이 있습니까? 아니면 좀 더 정교한 스크립트가 필요합니까? 어떤 생각이라도 주셔서 감사합니다!

답변1

를 추가하면 --status-fd <fd>gpg는 컴퓨터가 읽을 수 있는 상태 텍스트를 지정된 파일 설명자( 1stdout의 경우)로 출력합니다. 예를 들어:

$ gpg --status-fd 1 --verify authorized_keys.txt 
gpg: Signature made 2012-08-18T19:25:12 EEST
gpg:                using RSA key D24F6CB2C1B52632
[GNUPG:] SIG_ID BOn6PNVb1ya/KuUc2F9sfG9HeRE 2012-08-18 1345307112
[GNUPG:] GOODSIG D24F6CB2C1B52632 Mantas Mikulėnas <[email protected]>
gpg: Good signature from "Mantas Mikulėnas <[email protected]>"
gpg:                 aka "Mantas Mikulėnas <[email protected]>"
[GNUPG:] VALIDSIG 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632 2012-08-18 1345307112 0 4 0 1 2 00 2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632
[GNUPG:] TRUST_ULTIMATE

그런 다음 기본 출력을 폐기하고( 을 리디렉션하여 2> /dev/null) .VALIDSIG fingerprint

나는 다음을 사용합니다 :

fprint="2357E10CEF4F7ED27E233AD5D24F6CB2C1B52632"

verify_signature() {
    local file=$1 out=
    if out=$(gpg --status-fd 1 --verify "$file" 2>/dev/null) &&
       echo "$out" | grep -qs "^\[GNUPG:\] VALIDSIG $fprint " &&
       echo "$out" | grep -qs "^\[GNUPG:\] TRUST_ULTIMATE\$"; then
        return 0
    else
        echo "$out" >&2
        return 1
    fi
}

if verify_signature foo.txt; then
    ...
fi

수표를 제거해야 할 수도 TRUST_ULTIMATE있지만 VALIDSIG.

관련 정보