SSH와 Git을 gpg-agent에 연결

SSH와 Git을 gpg-agent에 연결

저는 GPG 키를 스마트 카드에 저장하기 위해 OpenPGP 애플릿과 함께 YubiKey NEO를 실행하고 있습니다. 시작 항목을 삭제하여 다른 모든 SSH 및 GPG 에이전트를 수동으로 중지했습니다(기본 OS Luna, Ubuntu 12.04).

scdaemon그런 다음 환경 변수를 내보내면서 프로세스를 시작했습니다 .

$ scdaemon --daemon
SCDAEMON_INFO=/tmp/gpg-zKwfGU/S.scdaemon:13142:1; export SCDAEMON_INFO;
$ SCDAEMON_INFO=/tmp/gpg-zKwfGU/S.scdaemon:13142:1; export SCDAEMON_INFO;

그런 다음 프로세스를 시작하여 gpg-agent환경 변수를 다시 내보냈습니다.

$ gpg-agent --enable-ssh-support --daemon --write-env-file "${HOME}/.gpg-agent-info" 
GPG_AGENT_INFO=/tmp/gpg-9UaXHX/S.gpg-agent:13322:1; export GPG_AGENT_INFO;
SSH_AUTH_SOCK=/tmp/gpg-WAYxYZ/S.gpg-agent.ssh; export SSH_AUTH_SOCK;
SSH_AGENT_PID=13322; export SSH_AGENT_PID;
$ GPG_AGENT_INFO=/tmp/gpg-9UaXHX/S.gpg-agent:13322:1; export GPG_AGENT_INFO;
$ SSH_AUTH_SOCK=/tmp/gpg-WAYxYZ/S.gpg-agent.ssh; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=13322; export SSH_AGENT_PID;

이제 SSH 서버에 연결합니다.

$ ssh [email protected]
Permission denied (publickey).

이상한.

다음과 같은 ssh프로세스를 실행하려고 하면 gpg-agent작동합니다™:

$ gpg-agent --enable-ssh-support --daemon ssh [email protected]

예상대로 PIN을 입력하라는 메시지가 표시되었고 pinentry연결에 성공했습니다.

내 스마트 카드를 SSH 키로 원활하게 사용하려면 무엇이 부족합니까? 통화 ssh앞에 를 붙일 필요가 없도록 하는 방법이 있나요 gpg-daemon? Bash 별칭을 만들 수 있다는 것을 알고 있지만 실제로 문제가 해결되지는 않습니다.


고쳐 쓰다

gpg-agent문제의 일부가 그것 없이도 저절로 시작되었다는 것을 알았고 --enable-ssh-support그것이 문제의 일부인 것 같았습니다. 시스템 제어판의 시작 응용 프로그램에는 표시되지 않지만 로그인한 사용자로 자동 실행됩니다. 내부가 아닙니다 /etc/xdg/autostart. 어디서 찾아서 비활성화할 수 있나요? 그동안 내 시작 앱에서는 다음을 실행했습니다.

killall -9 gpg-agent && gpg-agent --enable-ssh-support --daemon \
    --sh --write-env-file=$HOME/.gpg-agent-info

그런 다음 파일을 가져와서 환경 변수를 내보내면 작동합니다.

광산에는 ~/.gnupg/gpg-agent.conf이미 줄이 포함되어 있지만 enable-ssh-support효과가 없는 것 같습니다.

gpg-agent로그인시 다른 프로세스가 시작되는 것을 방지하는 방법은 무엇입니까 ?

답변1

gpg-agent프로세스가 시작된 것으로 밝혀졌습니다 . DEB 패키지에서 제공하는 파일은 다음과 같습니다 gpg-agent.

/etc/X11/Xsession.d/90gpg-agent:

: ${GNUPGHOME=$HOME/.gnupg}

GPGAGENT=/usr/bin/gpg-agent
PID_FILE="$GNUPGHOME/gpg-agent-info-$(hostname)"

if grep -;s '^[[:space:]]*use-agent' "$GNUPGHOME/gpg.conf" "$GNUPGHOME/options" &&
    test -x $GPGAGENT &&
    { test -z "$GPG_AGENT_INFO" || ! $GPGAGENT 2>/dev/null ; }; then

    if [ -r "$PID_FILE" ]; then
        . "$PID_FILE"
    fi

    # Invoking gpg-agent with no arguments exits successfully if the agent
    # is already running as pointed by $GPG_AGENT_INFO
    if ! $GPGAGENT 2>/dev/null; then
        STARTUP="$GPGAGENT --daemon --sh --write-env-file=$PID_FILE $STARTUP"
    fi
fi

나는 이 스크립트를 더 간단하고 효율적인 것으로 대체했습니다.

if [ ! -z "$(pgrep gpg-agent)" ]; then
    $GPGAGENT --daemon --enable-ssh-support --sh --write-env-file=$PID_FILE
fi

이렇게 하면 SSH 지원이 항상 제공됩니다. 왜 SSH 지원 활성화를 gpg-agent고려하지 않았는지 모르겠지만 ~/.gnupg/gpg-agent.conf이 솔루션이 작동하므로 기쁩니다.

관련 정보