我正在使用 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
我认为永久存储受密码保护的 SSH 密钥存在问题。
请查看以下资源:
答案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