如何解决此ssh-agent问题?


17

我正在使用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 pullWARNING: 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
您可以运行export | grep GNOME并发布结果吗?您看到错误了吗?
Didster 2012年

看起来像一个相关的错误。由于我并不总是看到警告,因此我不确定是否有更简单的问题,只是gnome-keyring在登录时自动解锁。
eoinoc 2012年

可能您有运行gnome-keyring的其他代理。怎么样env | grep SSHps -fp $SSH_AGENT_PID
斯特凡Chazelas

@StephaneChazelas我已经添加了您的建议,谢谢。是的,我使生活变得复杂zshtmux漫长(仅此而已)。
eoinoc

Answers:


2

即将发生的是:

您启动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。


您的意思是仅当我的X会话终止时(换句话说,当我注销并再次登录时)吗?我没有.gkr,应该吗?如何注意gnome-keyring-daemon要连接到哪个显示器?
eoinoc

2

我要尝试的第一件事是,apt-get install ssh-askpass-gnome如果您没有安装该软件包(或某些替代的AskPass程序),那么当您需要解锁密钥时,gnome不会提示您输入密码。

您还需要DISPLAY正确设置变量:

$ echo $DISPLAY
:0.0

另外,您如何启动终端?您启动终端会话的方式以及它是否继承自可能存在问题gnome-session。当您使用某些gnon-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)

我正在使用哪个终端(我自己的错!)有点复杂。我的终端启动命令是mate-terminal --maximize -e tmux(我假设 gnome-terminal)。此外,zsh然后在中加载tmuxssh-askpass-gnome已安装。$DISPLAY取得了预期的结果。为了继承,tmuxmate-terminal毫不在意gnome-session。在另一个分支上,它是tmux───zsh───xargs───pstree。要回答您的最后一个问题,输出为:init───mdm───mdm───x-session-manag───ssh-agent。你怎么看?谢谢。
eoinoc

好吧,假设您使用gnome(我认为Mint在默认情况下会这样做,所以除非您已将其更改为默认值?),否则我认为问题不在于mate-terminal从您的继承gnome-session。两个问题:1)pgrep -fl gnome-session和的输出是什么?2)您会采取什么措施来实际调用您的终端?从菜单上?从热键绑定?要么 ????
aculich

是的,我在Gnome上。1)输出为空。2)非常有趣。我通常会做Ctrl+Alt+t。这是我使用Linux Mint应用程序Keyboard Shortcuts使用前面提到的命令设置的快捷方式。但是Terminal通过主“开始”菜单启动时,SSH的行为有所不同。Gnome GUI提示我输入我的密匙环密码。为稍后的会话保存此密码短语的选项显示为灰色,我无法选择它。(菜单启动器命令也是mate-terminal --maximize -e tmux。)这会使我们更接近吗?谢谢,阿库里奇。
eoinoc

如果您看到Ctrl+Alt+t键盘快捷键中设置的行为异常,那么我认为您可能正在mdm / MATE中遇到错误。您正在运行什么版本的Mint?
aculich

我在Linux Mint 13上落后一个版本。但是对于通过菜单访问的终端,为什么仍然不让我选择“每次登录时都保存此密码”?
eoinoc

1

我会发表评论。在第一个链接中,我向其中添加了“ IdentityFile〜/ .ssh / id_rsa”,~/.ssh/config但并没有解决。
eoinoc

第三个链接显示了基本的设置,似乎没有比我已经做的更进一步的了。谢谢,不过。
eoinoc

-1

将此添加到您的.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

谢谢马克。与此相关,$SSH_AUTH_SOCK具有的值/tmp/ssh-QCndYkdq2025/agent.2025。我想念什么吗?$git pull仍然会弹出SSH密码提示。
eoinoc 2012年

在服务器上的.ssh / authorized_keys文件中检查您的权限。应该是0600。–
Mark Cohen

在服务器上?GitHub是外部服务器,我的SSH密钥记录在其中。这不是更多本地问题吗?
eoinoc 2012年

抱歉,没有意识到您正在使用github。是的,您无法控制该主机。您可以将多个密钥添加到ssh-agent并尝试将sshing到localhost,以确保可以正确进行身份验证。另外,您可以尝试ssh -vvv user @ host看看有什么问题。
马克·科恩

大多数台式机Linux系统(包括Mint)ssh-agent在开箱即用时都能正确处理,并且通常是这种类似您自己拥有的事情才能破坏它。如果由于某种原因您的系统无法处理ssh-agent,请不要手动进行。而是使用经过精心设计的钥匙串来处理此问题和相关问题。它也适用于BSD(Mac)和其他非Linux系统。
aculich 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.