我该如何解决这个 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 可以在没有我输入任何密码的情况下推送/拉取?

我意识到这里有 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 的所有 shell 中执行此操作

请注意 gnome-keyring-daemon 将连接到哪个 DISPLAY。

答案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

相关内容