이 ssh-agent 문제를 어떻게 해결할 수 있나요?

이 ssh-agent 문제를 어떻게 해결할 수 있나요?

저는 Linux Mint를 사용하고 있는데 로그인 시 gnome-keyring을 자동으로 잠금 해제할 수 없는 것 같습니다.

내 문제의 증상은 다음과 같습니다.

$ ssh-add
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

$ git pull
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-Nmf3J3/pkcs11: No such file or directory

비밀번호를 입력하지 않고 어떻게 git push/pull을 할 수 있나요?

여기에 gnome-keyring 및 ssh-agent 관련 항목이 있다는 것을 알고 있지만 아직까지 확정할 수는 없습니다.

세션 중에 실행하면 ssh-add더 이상 SSH/git에 대한 비밀번호를 묻는 메시지가 표시되지 않습니다.

문제는 ssh-add매 세션마다 이것을 실행해야 한다는 것입니다. 로그인 시 Gnome을 잠금 해제하는 방법에 대한 키링이 없어야 합니다.

$ export | grep GNOME          
GNOME_KEYRING_CONTROL=/tmp/keyring-hjMM4V
GNOME_KEYRING_PID=1961

이는 첫 번째 편집의 동일한 세션 중에 다시 발생합니다. 나는 그것을 했고 git pull그것을 얻었다 WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-hjMM4V/pkcs11: No such file or directory.

$ env | grep SSH
SSH_AGENT_PID=2116
SSH_AUTH_SOCK=/tmp/ssh-OACxJMBY2038/agent.2038

$ ps -fp $SSH_AGENT_PID
UID        PID  PPID  C STIME TTY          TIME CMD
eoin      2116  2038  0 09:47 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager

답변1

무슨 일이 일어나야 하는가는 다음과 같습니다

gnome 세션을 시작하면 gnome-keyring 데몬(ssh 에이전트 역할도 함)의 일부가 시작되고 해당 gnome 세션 중에 시작된 모든 환경이 해당 SSH 에이전트에 연결하는 방법에 대한 정보로 업데이트됩니다. 그래픽으로 로그인할 때 발행하는 비밀번호는 기본 키링을 잠금 해제하는 데 사용됩니다.

gnome-keyring을 SSH 프록시로 사용하는 경우 ssh-agent.

X 세션이 종료되면 gnome-keyring도 종료됩니다. 하지만 tmux 세션이 여전히 존재합니다. 그런 다음 다른 gnome-keyring 또는 ssh-agent를 시작하더라도 이미 시작된 프로세스의 환경은 tmux새 소켓 경로로 환경을 업데이트하지 않는 한 통신할 수 없습니다.

당신이 할 수 있는 일은 다음과 같습니다:

gnome-keyring-daemon -r > ~/.gkr

. ~/.gkr새로운 gnome-keyring을 사용하려는 모든 쉘에서 이 작업을 수행하십시오 .

어느 DISPLAY gnome-keyring-daemon에 연결되는지 확인하세요.

답변2

내가 시도할 첫 번째 일은 apt-get install ssh-askpass-gnome해당 패키지가 설치되어 있지 않은 경우(또는 다른 Askpass 프로그램) 키를 잠금 해제해야 할 때 gnome이 비밀번호를 묻는 메시지를 표시하지 않는다는 것입니다.

DISPLAY또한 변수를 올바르게 설정 해야 합니다 .

$ echo $DISPLAY
:0.0

또한 터미널을 어떻게 시작합니까? 터미널 세션을 시작한 방법 및 에서 상속되었는지 여부 gnome-session이는 특정 gno-gnome 프로그램을 사용하여 키 바인딩을 설정할 때 발생할 수 있습니다.

사용한다고 가정하면 를 gnome-terminal사용하여 확인할 수 있습니다 pstree. 여기에서 올바른 상속이 일어나는 것을 볼 수 있습니다.

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───xmonad-x86_64-l(27139)───gnome-terminal(26036)─┬─bash(26041)
                                                                                                                 ├─gnome-pty-helpe(+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 └─{gnome-terminal}+

그리고 이 세션에서는 다음에서 상속되지 않습니다 gnome-session.

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───sh(25919)───gnome-terminal(25920)─┬─bash(25927)
                                            ├─gnome-pty-helpe(25926)
                                            ├─{gnome-terminal}(25921)
                                            ├─{gnome-terminal}(25924)
                                            └─{gnome-terminal}(25928)

또한 다음을 ssh-agent통해 실행되고 있는지 확인하세요 gnome-session.

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)

답변3

답변4

이것을 .bash_profile에 추가하세요

if [ -n "$SSH_AUTH_SOCK" \
    -a "${SSH_AUTH_SOCK::13}" = "/tmp/keyring-" \
    -a ! -L "$SSH_AUTH_SOCK" ]
then
    OLD_AUTH_SOCK="$SSH_AUTH_SOCK"
    eval `ssh-agent`
    mv "$OLD_AUTH_SOCK" "$OLD_AUTH_SOCK"~
    ln -sfn "$SSH_AUTH_SOCK" "$OLD_AUTH_SOCK"
    SSH_AUTH_SOCK="$OLD_AUTH_SOCK"
fi

관련 정보