gpg-agent와 다른 키 소스를 사용하여 SSH 인증을 하시겠습니까?

gpg-agent와 다른 키 소스를 사용하여 SSH 인증을 하시겠습니까?

tl;dr: gpg-agentSSH 키에 대해 다른 소스를 사용할 수 있도록 영구 가져오기 기능을 비활성화하거나 이를 해결하는 방법이 있습니까 ?

상황

나는 사용한다GnuPG 2 키(YubiKey에서) gpg-agent을 통한 SSH 인증용 enable-ssh-support. 이것은 잘 작동합니다.

나는 ~를 가지고있다다른 키사용 가능합니다(파일 시스템 및 KeePassXC). ssh-add또는 KeePassXC를 사용하여 추가 하면 에서 가져오고 gpg-agent저장됩니다 ~/.gnupg/private-keys-v1.d/. 암호화하려면 추가 비밀번호를 제공해야 합니다.

문제

이는 광고된 대로 작동하지만 키를 다른 곳에 저장하는 목적을 상실합니다.

  • 나는 KeePassXC를 원합니다일시적으로 키 추가ssh-agent비밀번호 데이터베이스를 잠금 해제할 때 현재 상태로 유지됩니다 . 이후에는 키를 영구적으로 사용할 수 없어야 합니다.
  • 셸에서 키 파일을 가져오는 것과 유사합니다 ssh-add. 더 많은 암호를 제공해야 하는 동안 해당 파일을 가져오고 유지하고 싶지 않습니다.

모든 키 소스를 사용하도록 허용하면서 가져오기를 방지하려면 어떻게 해야 합니까? 내가 갖고 있던 한 가지 아이디어는 동일한 시스템에 여러 에이전트를 설정하여 gpg-agent로컬로 전달할 수 있다는 것이었지만 ssh-agent이는 지나치게 복잡해 보일 수 있습니다.

비슷한 문제는 다음의 일부입니다.이 KeePassXC 문제, 그러나 해결책이 제안되지 않았습니다.

답변1

세 번째 옵션: gpg-agent를 통해 Yubikey를 사용하는 대신 PKCS#11을 통해 PIV 스마트카드 지원을 사용합니다. 이는 기본적으로 다음을 통해 OpenSSH에서 지원됩니다 PKCS11Provider.

ssh -I opensc-pkcs11.so root@myhost

ssh-agent는 PKCS#11 키도 인식할 수 있습니다.

ssh-add -s opensc-pkcs11.so

(Yubico는 yubico-piv-tool의 일부로 자체 Yubikey 관련 libykcs11.so모듈도 제공하지만, 후자는 이제 더 이상 사용되지 않으므로 libykcs11.so도 더 이상 사용되지 않으며 OpenSC의 일반 PIV 지원을 사용해야 한다고 가정합니다. 실제로 두 모듈은 서로 바꿔 사용할 수 있으며 문제 없이 서로의 개체를 인식합니다.)

Yubikey의 OpenPGP와 PIV 애플릿은 완전히 별개이며 둘 사이에서 키를 이동할 수 없습니다. 따라서 하드웨어에서 생성된 키 쌍인 경우 불행하게도 ykman piv. (Yubikey를 사용하면 소프트웨어 생성 키를 가져올 수 있습니다.)

  1. PIN(및 잊어버린 PIN 차단을 해제하기 위한 PUK)을 설정합니다. 둘 다 영숫자여야 하며 길이는 6~8자여야 합니다.

    ykman piv change-pin -P 123456
    ykman piv change-puk -p 12345678
    
  2. 자체 서명된 인증서(SSH는 신경 쓰지 않음)와 함께 키를 생성합니다.

    ykman piv info
    ykman piv generate-key -a ECCP256 9a /tmp/9a.pub
    ykman piv generate-certificate 9a /tmp/9a.pub -s "Thomas" -d 3650
    rm /tmp/9a.pub
    

    최신 버전이 없는 경우 이전 도구 나 다양한 일반 PKCS#11 도구(예: OpenSC 또는 GnuTLS ) 를 ykman사용할 수 있습니다 .yubico-piv-toolpkcs11-toolp11tool

    yubico-piv-tool -a change-pin -P 123456
    yubico-piv-tool -a change-puk -P 12345678
    yubico-piv-tool -a status
    yubico-piv-tool -a generate -A ECCP256 -s 9a -o /tmp/9a.pub
    yubico-piv-tool -a verify-pin -a selfsign-certificate \
                    -s 9a -S "/CN=Thomas" -i /tmp/9a.pub -o /tmp/9a.crt
    yubico-piv-tool -a import-certificate -s 9a -i /tmp/9a.crt
    
  3. Authorized_keys 형식으로 공개 키를 내보냅니다.

    ssh-keygen -D opensc-pkcs11.so > Yubikey.pub
    
  4. 연결시 ssh -I옵션이나 설정을 이용하세요 . PKCS11Provider(매번 스마트카드 PIN을 입력하라는 메시지가 표시됩니다. 이를 줄이려면 필요한 경우 SSH 연결 멀티플렉싱을 설정하세요.)

이 접근 방식에는 다른 장점도 있습니다. Windows에는 이미 PIV 스마트 카드용 드라이버가 있으므로(예: PuTTY-CAC 또는 CAPI/CNG 키 저장소를 SSH 클라이언트에 연결하는 여러 다른 프로젝트를 통해) Windows에서도 사용하기가 매우 쉽습니다.

관련 정보