Magit, como usar o agente ssh do sistema e não pedir senha

19

Eu pesquisei e li o FAQ e o Wiki do Magit, mas ainda não consegui descobrir isso, tudo o que encontro são respostas sobre o Windows ...

Como posso configurar o Magit para usar a minha sessão ssh-agent em execução e não pedir minha senha ao fazer um push.

Estou executando o linux e tenho a inicialização do ssh-agent no meu terminal e desbloqueio a minha chave, o que me permite executar git push, etc., sem que eu digite a senha todas as vezes.

Env:
Arch Linux
Emacs 24.4

ssh-agent com chaves adicionadas, para desbloquear no primeiro terminal aberto.

EDIT: Eu quis dizer usando senha, você sabe para a chave ssh, et al.
E estou empurrando para o Bitbucket, mas acredito que o principal problema é que o Magit não está falando / reconhecendo meu agente ssh.
Talvez haja alguma configuração para definir, para dizer que estou executando?

Andres
fonte
Na verdade, veio com a mesma pergunta.
emacsomancer
Qual é o URL remoto? http: // ou git: //?
Nsukami _
[email protected] nesse caso, configure da seguinte maneira: url = [email protected]:
Andres
Você pode nos dizer o que o Emacs está retornando quando você faz M-x getenv SSH_AGENT_PID? M-x getenv SSH_AUTH_SOCK
Nsukami _
SSH_AGENT_PID = 602 SSH_AUTH_SOCK = /tmp/ssh-13kI6AaYvgji/agent.601
Andres

Respostas:

13

Bem, isso acabou sendo mais uma toca de coelho do que eu pensava ... E, pelo que entendi, não há uma solução melhor para esse problema específico, com essa combinação de desktop, ssh-agent, emacs.

Problema 1 O
XFCE estava iniciando seu próprio ssh-agent com a sessão, sem dizer isso em nenhum lugar, o que fez com que o sistema tivesse 1 ssh-agent global não utilizado e meu agente desbloqueado específico do shell.
Em um DE diferente, você pode executar o mesmo problema e precisará encontrar os detalhes específicos para desativar o início automático do agente.

Solução 1
Execute este comando para desativar a execução do ssh-agent de inicialização

xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false

Problema 2
faz agora Emacs não tem nenhum SSH_AGENT_PID e SSH_AUTH_SOCK variáveis definido, então nada no ambiente carregado. Obviamente, o Magit ainda pede a chave, pois não sabe sobre o novo agente ssh que começamos.

Solução 2
Precisamos que o Emacs busque essas novas variáveis ​​do ambiente, mas é claro, não há um caminho direto.
Digite: exec-path-from-shell que permite buscar variáveis ​​de ambiente do seu shell. Então.

  1. Instale o pacote exec-path-from-shell da sua maneira preferida.
  2. Adicione o seguinte código ao seu init.el para que ele seja carregado quando você iniciar o Emacs.

(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")

Obrigado pessoal pela sugestão de olhar para as variáveis ​​SSH _ **, que me indicaram a direção certa.

Andres
fonte
Algum motivo específico para você não estar satisfeito com o agente do XFCE e querer executar o seu próprio? Abandonar isso pareceria a solução mais simples.
Tripleee
Nem sempre eu executo o XFCE, nem me importo com a maneira como o desktop o gerencia; prefiro o plug-in que lida com o oh-my-zsh. Portanto, é mais fácil pular o caso de uso padrão. (concedido Eu não sei o suficiente sobre o agente ... mas não é algo que eu realmente quero gastar tempo pensando sobre qualquer maneira)
Andres
Talvez o Zsh reconheça o caso quando um agente já estiver em execução e, em vez disso, adie-o; mas, obviamente, isso está ficando fora de tópico aqui.
Tripleee
1
Talvez o ssh-agency também deva ser estendido para funcionar em sistemas tipo Unix.
npostavs
7

Outra solução para o preguiçoso é usar apenas um pacote que lida exatamente com esse caso (configurando as variáveis ​​de ambiente relacionadas às chaves do Emacs):

  1. Instalar e adicionar ao seu pacote init.el keychain-ambiente .
  2. Execute M-x keychain-refresh-environmente agora deve funcionar.
  3. Coloque (keychain-refresh-environment)em seu init.el, para que a solução funcione após reiniciar o Emacs

E isso é tudo, supondo que o seu ssh-agent esteja configurado e em execução.

Descrição muito boa, a partir do comentário do pacote:

Keychain é um script que gerencia ssh-agent e gpg-agent. Geralmente é executado a partir do arquivo de inicialização do shell. Ele permite que seus trabalhos de shells e cron compartilhem um único agente ssh e / ou gpg-agent.

Quando o chaveiro é executado, ele verifica o agente em execução, caso contrário, ele é iniciado. Ele salva as variáveis ​​de ambiente dos agentes em arquivos dentro de ~ / .keychain /, para que shells subsequentes possam obter esses arquivos.

Quando o Emacs é iniciado no X11 e não diretamente de um terminal, essas variáveis ​​não são definidas. Esta biblioteca procura esses arquivos criados pelo keychain e define as variáveis ​​de ambiente do Emacs de acordo. Na verdade, ele não executa chaves, então você ainda precisa executá-las a partir de um shell de login.

Para usar, execute a função `keychain-refresh-environment 'no seu arquivo init. Se o chaveiro ainda não foi executado quando você inicia o Emacs, também pode chamar essa função mais tarde.

Veja também: http://www.funtoo.org/wiki/Keychain

tlegutko
fonte
1
Isso é exatamente o que eu precisava, pois já uso keychain.
Xj6
1

Agora, o FWIW keychainpossui uma --systemdopção que injeta as variáveis ​​no ambiente do usuário do systemd.

A solução mais simples que encontrei foi adicionar eval "$(keychain --eval --quiet --noask --systemd keys...)"a um script executado na unidade systemd para iniciar o servidor Emacs.

Vladimir Panteleev
fonte