Como posso resolver esse problema do ssh-agent?

17

Estou usando o Linux Mint e não foi possível obter o gnome-keyring para desbloquear automaticamente no login, ao que parece.

Um sintoma do meu problema é o seguinte:

$ 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

Como posso fazer com que o git possa empurrar / puxar sem nenhuma entrada de senha da minha parte?

Sei que há várias coisas aqui com o gnome-keyring e o ssh-agent, mas não consegui identificá-lo.

A execução ssh-adddurante uma sessão significa que não sou mais solicitada minha senha para SSH / git.

O problema é que eu precisaria executar ssh-adddurante cada sessão - devo estar sentindo falta de como desbloquear o chaveiro do Gnome no login.

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

Aconteceu novamente durante a mesma sessão da primeira edição. Eu fiz git pulle consegui 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
eoinoc
fonte
1
Você pode executar export | grep GNOMEe postar os resultados. Você viu esse bug?
Didster #
Parece um bug relevante. Como nem sempre vejo o aviso, não tenho certeza se tenho um problema mais simples, basta gnome-keyringdesbloquear automaticamente no login.
Eoinoc 29/10/12
possivelmente você tem outro agente que não o gnome-keyring em execução. E sobre env | grep SSHeps -fp $SSH_AGENT_PID
Stéphane Chazelas
@StephaneChazelas Adicionei o que você sugeriu, obrigado. Sim, tornei a vida complexa zshe em tmuxexecução (apenas para mencionar isso).
Eoinoc 29/10/12

Respostas:

2

O que deve acontecer é:

Você inicia uma sessão do gnome, parte da qual um daemon do gnome-keyring (que também atua como um agente ssh) é iniciado e o ambiente de qualquer coisa iniciada durante a sessão do gnome é atualizado com informações sobre como entrar em contato com esse agente ssh. A senha emitida após o login gráfico é usada para desbloquear o chaveiro padrão.

Quando você usa o gnome-keyring como um agente ssh, não deseja usar outro agente como ssh-agent.

Quando sua sessão X termina, o mesmo ocorre com o gnome-keyring. Mas sua sessão tmux permanece. Então, mesmo se você iniciar outro gnome-keyring ou ssh-agent, o ambiente dos processos já iniciados tmuxnão poderá falar com ele, a menos que você atualize o ambiente com o caminho do novo soquete.

O que você pode fazer é:

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

E faça . ~/.gkrem todas as conchas que você deseja usar o novo chaveiro gnomo

Cuidado com o DISPLAY ao qual o gnome-keyring-daemon se conectará.

Stéphane Chazelas
fonte
Você quer dizer que isso é apenas para quando minha sessão X terminar, ou seja, sempre que eu sair e entrar novamente? Eu não tenho .gkr, devo? Como posso ter cuidado com qual monitor gnome-keyring-daemonvai se conectar?
EOOCOC
2

A primeira coisa que eu tentaria é o apt-get install ssh-askpass-gnomecontrário, se você não tiver esse pacote (ou algum programa alternativo askpass) instalado, o gnome não poderá solicitar sua senha quando precisar desbloquear sua chave.

Você também precisará DISPLAYdefinir sua variável corretamente:

$ echo $DISPLAY
:0.0

Além disso, como você está iniciando seu terminal? Pode haver um problema com o modo como você está iniciando a sessão do terminal e se ela é herdada ou não gnome-session. Isso pode acontecer quando você usa algum programa gnon-gnome para definir suas ligações de teclas.

Presumindo que você use, gnome-terminalvocê pode verificar usando pstree. Aqui você pode ver a herança correta acontecendo:

$ 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}+

Considerando que nesta sessão NÃO é herdado de 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)

Além disso, verifique se ssh-agentestá sendo iniciado por gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)
aculich
fonte
É um pouco complicado sobre o terminal que estou usando (minha culpa!). Meu comando de inicialização do terminal é mate-terminal --maximize -e tmux(que eu presumo ser o gnome-terminal). Além disso, zshé então carregado dentro tmux. ssh-askpass-gnomefoi instalado. $DISPLAYtem resultado esperado. Para a herança, tmuxestá sentado mate-terminalcom nenhuma menção de gnome-session. Em um ramo separado, é tmux───zsh───xargs───pstree. Para responder à sua última pergunta, a saída é: init───mdm───mdm───x-session-manag───ssh-agent. O que você acha? Obrigado.
Eoinoc 29/12/12
bem, presumindo que você use o gnome (e acho que o Mint usa por padrão, então, a menos que você o tenha alterado do padrão?), acho que não ter sua mate-terminalherança gnome-sessioné o problema. duas perguntas: 1) qual é o resultado de pgrep -fl gnome-sessione; 2) que ação você toma para realmente chamar seu terminal? de um menu? de uma ligação de teclas de atalho? ou ????
Aculich
Sim, eu estou no Gnome. 1) A saída está vazia. 2) muito interessante. Eu costumo fazer Ctrl+Alt+t. É um atalho que defini usando o aplicativo Linux Mint Keyboard Shortcutsusando o comando mencionado anteriormente. No entanto , ao iniciar Terminalo menu principal "Iniciar", o SSH agia de maneira diferente . A GUI do Gnome solicitou minha senha para o meu chaveiro. A opção de salvar essa senha para sessões posteriores estava acinzentada, não consegui selecioná-la. (O comando do iniciador de menus também é mate-terminal --maximize -e tmux.) Isso nos aproxima? Obrigado, aculich.
eoinoc
Se você está vendo um comportamento estranho com o Ctrl+Alt+tque você definiu nos atalhos de teclado, acho que provavelmente está enfrentando um erro no mdm / MATE. Qual versão do Mint você está executando?
Aculich 31/12/12
Estou com uma versão por trás, no Linux Mint 13. Mas, para o terminal acessado por menus, por que ele ainda não me deixou selecionar "salvar esta senha para cada vez que efetuar login"?
Eoinoc 31/12/12
1

Acho problema em armazenar permanentemente chave SSH protegida por senha.

Por favor, dê uma olhada nos seguintes recursos:

Md Mahbubur Rahman
fonte
Vou comentar enquanto vou. Com o primeiro link, adicionei `IdentityFile ~ / .ssh / id_rsa`, ~/.ssh/configmas isso não foi corrigido.
Eoinoc 29/12/12
O terceiro link mostra a configuração básica que não parece ir além do que eu já fiz. Obrigado, no entanto.
Eoinoc 29/12/12
-1

Adicione isso ao seu .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
Mark Cohen
fonte
Obrigado Mark. Com isso, $SSH_AUTH_SOCKtem um valor de /tmp/ssh-QCndYkdq2025/agent.2025. Estou esquecendo de algo? $git pullainda exibe o prompt da senha SSH.
EOOCOC
Verifique suas permissões no seu arquivo .ssh / allowed_keys no servidor. Deveria ser 0600. #
Mark Cohen
No servidor? O GitHub é o servidor externo e minha chave SSH é gravada lá. Não é mais uma questão local, não?
eoinoc
Desculpe, você não sabia que estava usando o github. Sim, você não tem controle sobre esse host. Você pode adicionar várias chaves ao seu ssh-agent e experimentar o sshing no localhost para garantir a autenticação correta. Além disso, você pode tentar ssh -vvv user @ host e ver o que está quebrando.
Mark Cohen
A maioria dos sistemas Linux para desktops (incluindo o Mint) são gerenciados ssh-agentcorretamente após o login, e geralmente são coisas como você que quebram. Se, por algum motivo, seu sistema não funcionar ssh-agent, não faça à mão. Em vez disso, use um chaveiro bem projetado para lidar com esse e outros problemas relacionados. Também funciona para BSD (Mac) e outros sistemas não Linux.
Aculich 28/12/12