Não foi possível abrir uma conexão com seu agente de autenticação


1605

Estou com este erro de:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

Tentei adicionar as chaves e recebo este erro abaixo:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
Pergunta: depois de ler TODAS as respostas nesta página, e nenhuma delas funciona. O que você pode fazer a seguir?
Brandon Bertelsen

8
@BrandonBertelsen Experimente este: $ ssh-agent /bin/sh e $ ssh-add $yourkey
shyam

@BrandonBertelsen Em seguida, você deve usar git config --listpara ver se você definiu credential.helper- se você tiver, remova essa configuração, pois o auxiliar está sendo inútil.
yoyo

Respostas:


2384

Você começou ssh-agent?

Pode ser necessário iniciar ssh-agentantes de executar o ssh-addcomando:

eval `ssh-agent -s`
ssh-add

Observe que isso iniciará o agente do msysgit Bash no Windows . Se você estiver usando um shell ou sistema operacional diferente, pode ser necessário usar uma variante do comando, como as listadas nas outras respostas .

Veja as seguintes respostas:

  1. ssh-add reclama: Não foi possível abrir uma conexão com seu agente de autenticação
  2. Git push requer nome de usuário e senha (contém instruções detalhadas sobre como usar o ssh-agent)
  3. Como executar o agente de autenticação (git / ssh)? .
  4. Não foi possível abrir uma conexão com seu agente de autenticação

Para iniciar automaticamente o ssh-agent e permitir que uma única instância funcione em várias janelas do console, consulte Iniciar o ssh-agent no login .

Por que precisamos usar em evalvez de apenas ssh-agent?

Para descobrir o porquê, consulte a resposta de Robin Green .

Chaves Públicas x Privadas

Além disso, sempre que uso ssh-add, sempre adiciono chaves privadas a ele. O arquivo ~/.ssh/id_rsa.pubparece uma chave pública, não tenho certeza se isso funcionará. Você tem um ~/.ssh/id_rsaarquivo? Se você o abrir em um editor de texto, ele diz que é uma chave privada?


18
@xtian Não sei se entendi o problema. Não sei os detalhes exatos, mas acho que a chave privada nunca é enviada pela rede. Eu acho que ssh-addapenas descriptografa uma chave privada criptografada na máquina host, para que possa ser usada localmente ... nunca é enviada a ninguém . Suponho que apenas as chaves públicas sejam enviadas através de uma rede. Meu entendimento está incorreto?

6
Você é muito gentil, Cupcake. Você está absolutamente correto. Foi mal. ex aqui ; O ssh-add adiciona a chave privada para que o agente ssh do usuário (processo em execução) possa agir em nome do cliente / host, com o servidor aceitando chaves rsa-any. Nossa. Não sei o que me deixou tão animado.
Xtian #

22
Estou curioso para saber por que eval ssh-agent -sfunciona, mas ssh-agentpor si só não.
DanielM

13
@DanielM: O SSH precisa de duas coisas para usar o ssh-agent: uma instância do ssh-agent em execução em segundo plano e um conjunto de variáveis ​​de ambiente que informa ao SSH qual soquete ele deve usar para se conectar ao agente ( SSH_AUTH_SOCKIIRC). Se você apenas executar ssh-agent, o agente será iniciado, mas o SSH não fará ideia de onde encontrá-lo.
Vanessa Phipps

4
Obrigado por responder. Acabei de perceber que você usou aspas no comando. Eu estou tão confuso porque o acento grave ( ') de trabalho para o comando eval mas citação não single / double (' ") no meu shell bash?
Weishi Zeng

540

Eu tentei as outras soluções sem sucesso. Fiz mais pesquisas e descobri que o seguinte comando funcionava. Estou usando o Windows 7 e o Git Bash .

eval $(ssh-agent)

Mais informações em: https://coderwall.com/p/rdi_wq


14
Também funcionou no Windows 8.
Andreas Rudolph

Também estou usando o Windows 7 e o Git Bash, e minha resposta funciona muito bem. É legal que você também possa fazer dessa maneira também.

2
Ótimo !! Trabalhou com o Windows 10 também.
NitinM

1
Trabalhou em Manjaro
code_flow 23/12/19

1
$ eval "$ (ssh-agent -s)" funcionou para mim no Windows 10
Andrew Anderson

261

O comando a seguir funcionou para mim. Estou usando o CentOS.

exec ssh-agent bash

3
Obrigado, isso funcionou para mim, executei o 'exec ssh-agent zsh' para o meu shell.
Jasonmcclurg

2
De acordo com esta "resposta" excluída , ele também funciona no Amazon Linux AMI. Eu acho que é uma solução Unix / Linux / * nix.

4
Mergulhei em um contêiner e ssh-add my.id_rsafalharia comigo. Mas exec ssh-agent zshdeu um ambiente onde eu pude ssh-addsem nenhum problema. E eu estou dentro do meu recipiente janela de encaixe :)
Markuz-gj

Alguém pode explicar brevemente qual poderia ter sido o problema? Obrigado :) Isso funcionou no meu Ubuntu 14.04 também.
harkirat1892

trabalhou em raspbian também
mega_creamery

215

MsysGit ou Cygwin

Se você estiver usando o Msysgit ou o Cygwin, poderá encontrar um bom tutorial no SSH-Agent em msysgit, cygwin e bash :

  1. Adicione um arquivo chamado .bashrcà sua pasta pessoal.

  2. Abra o arquivo e cole em:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
    
  3. Isso pressupõe que sua chave esteja no ~/.ssh/id_rsalocal convencional . Caso contrário, inclua um caminho completo após o ssh-addcomando.

  4. Adicione ou crie um arquivo ~/.ssh/configcom o conteúdo

    ForwardAgent yes
    

    No tutorial original, o ForwardAgentparâmetro é Yes, mas é um erro de digitação. Use todas as letras minúsculas ou você receberá erros.

  5. Reinicie o Msysgit. Ele solicitará que você digite sua senha uma vez, e é isso (até que você termine a sessão ou seu agente ssh seja morto).

Mac OS X

Se você não deseja iniciar um novo ssh-agent toda vez que abrir um terminal, confira Chaveiro . Agora estou em um Mac, então usei o tutorial ssh-agent com zsh & keychain no Mac OS X para configurá-lo, mas tenho certeza de que uma pesquisa no Google terá muitas informações para o Windows.

Atualização : Uma solução melhor no Mac é adicionar sua chave ao Mac OS Keychain:

ssh-add -K ~/.ssh/id_rsa

Simples assim.



1
Quando eu faço, eval `ssh-agent -s`o processo não para quando eu saio do cygwin.
22414 Kiril

Existe uma maneira de configurar a configuração do Windows / gitbash para que você não precise fazer isso todas as vezes?
Julio

4
Deveria ser ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)- caso contrário, um novo agente ssh é iniciado toda vez. Matou minha máquina de vez em quando quando o usuário tinha cronjobs.
Destruindo

3
ForwardAgent yesnão é necessário e representa um risco de segurança não-teórico, se estiver definido para qualquer servidor não confiável. O acesso local ao seu agente-chave deve funcionar independentemente dessa configuração.
SeldomNeedy 4/16

208

Não foi possível abrir uma conexão com seu agente de autenticação

Para resolver este erro:

bater:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Em seguida, use ssh-addcomo faria normalmente.


Dica quente:

Eu estava sempre esquecendo o que digitar para os comandos ssh-agent acima, então criei um alias no meu .bashrcarquivo assim:

alias ssh-agent-cyg='eval `ssh-agent -s`'

Agora, em vez de usar ssh-agent, eu posso usarssh-agent-cyg

Por exemplo

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

Fonte original de correção:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


3
você precisará executar o evalcomando toda vez que executaria anteriormente ssh-agent. Eu uso um alias agora, veja a resposta atualizada sobre como faço isso.
Chris Neve


Eu também precisava usar a especificação ssh em vez de https (veja help.github.com/articles/changing-a-remote-s-url )
RunHolt

1
Você senhor, você é incrível. Obrigado. ** I enfrentou o mesmo problema, enquanto a clonagem de um repo bitbucket, eu já configurar uma chave ssh, mas continuei recebendo erro: fatal: Could not read from remote repository..
Nishant Ghodke

Trabalhou para mim no Windows 10 e git do bash instalado
desmond13

116

Eu enfrentei o mesmo problema no Linux, e aqui está o que eu fiz:

Basicamente, o comando ssh-agent inicia o agente, mas na verdade não define as variáveis ​​de ambiente para execução. Apenas envia essas variáveis ​​para o shell.

Você precisa:

eval `ssh-agent`

e depois faça o ssh-add. Consulte Não foi possível abrir uma conexão com seu agente de autenticação .



Funcionou para mim também, tendo problemas ao usar o boot2docker no Windows.
Veve

Foi o que foi preciso para mim.
Tom

115

O ssh-add e o ssh (supondo que você esteja usando as implementações openssh) requerem uma variável de ambiente para saber como conversar com o agente ssh. Se você iniciou o agente em uma janela de prompt de comando diferente da que está usando agora ou se iniciou incorretamente, nem o ssh-add nem o ssh verão a variável de ambiente definida (porque a variável de ambiente está definida localmente no comando prompt definido em).

Você não diz qual versão do ssh está usando, mas se estiver usando o cygwin, você pode usar esta receita do SSH Agent no Cygwin :

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

Isso iniciará um agente automaticamente para cada nova janela de prompt de comando que você abrir (que é abaixo do ideal se você abrir vários prompts de comando em uma sessão, mas pelo menos deve funcionar).



9
Eu estava ligado aqui a partir de outra questão SO. Posso perguntar por que é necessário adicionar isso ao arquivo de configuração do Bash? Na minha máquina, tudo o que preciso fazer é executar eval $(ssh-agent)e posso usar o ssh sem senha para cada nova janela do terminal.
Andy J

Isso não deve ser possível, a menos que você esteja lançando novos terminais a partir desse terminal.
Robin Green

114

Corre

ssh-agent bash
ssh-add

Para obter mais detalhes, você pode pesquisar

ssh-agent

ou correr

man ssh-agent

7
Eu recomendaria que, se você estiver trabalhando com o git bash no Windows, tente isso.
Neeraj Sewani 23/02/19

@ neer17 isso me permitiu usar ssh-copy-idno ubuntu. Não sei por que não consegui adicionar a chave sem usar ssh-agentpara iniciar o bash.
SomeGuyOnAComputer

2
Este é o único para Windows! (testado no W10pro build 1809 e no git 2.21.0)
Alfabravo 31/04/19

Estou usando o ZSH e isso funciona para mim:ssh-agent zsh; ssh-add
sirboderafael

97

Tente os seguintes passos:

1) Abra o Git Bash e execute: cd ~/.ssh

2) Tente executar o agente: eval $(ssh-agent)

3) No momento, você pode executar o seguinte comando: ssh-add -l


9
Esta é a única solução aqui que funcionou para mim (no Windows 7). Primeiro eu usei o ps aux | grep ssheo killcomando em resposta de Rick para matar os agentes. Depois disso ssh-addfuncionou sem a opção -l (o uso de -l deu um erro). eval 'ssh-agent'como na resposta de Rick não funcionou, tive que usar eval $(ssh-agent)como na resposta de Chechoro aqui.
Frug

6
+1 Eu tive exatamente o mesmo problema que o OP (Windows 7) e esta é a única solução que funcionou para mim.
Weblurk


2
@ Frug É backticks, não apóstrofos; no shell script que significa executar o que está contido dentro. $(ssh-agent)é equivalente a, `ssh-agent`mas mais legível.
MM

96

Em vez de usar $ ssh-agent -s, eu costumava $ eval `ssh-agent -s`resolver esse problema.

Aqui está o que eu executei passo a passo (passo 2 em diante no GitBash):

  1. Limpei minha pasta .ssh em C:\user\<username>\.ssh\
  2. Gerou uma nova chave SSH
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. Verifique se alguma identificação de processo (agente ssh) já está em execução.
    $ ps aux | grep ssh
  4. (Opcional) Se houver algum na etapa 3, mate os
    $ kill <pids>
  5. Iniciado o agente ssh
    $ eval `ssh-agent -s`
  6. Chave ssh adicionada gerada na etapa 2 ao agente ssh
    $ ssh-add ~/.ssh/id_rsa

3
'eval' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote.
Chutipong Roobklom 10/09

Você pode simplesmente reiniciar o agente eval ssh-agent -se adicionar uma chave antiga usando ssh-add ~ / .ssh / id_rsa. Se você gerar nova chave SSH, então você vai precisar atualizar essa chave em todos os seus serviços como github, bitbucket, etc.
Mohit Satish Pawar

Existe uma maneira de fazer isso sobreviver ao Windows reiniciar? Após o reinício, ele não funcionará até eu lançar "eval ssh-agent -s" e "ssh-add ~ / .ssh / id_rsa" novamente.
Michal Vician

1
depois de procurar por um longo tempo, esta é a solução que funcionou
Sujit.Warrier

Ótima explicação!
avivamg

56

No Windows 10, tentei todas as respostas listadas aqui, mas nenhuma delas parecia funcionar. De fato, eles dão uma pista. Para resolver um problema, basta ter 3 comandos. A idéia desse problema é que o ssh-add precise que as variáveis ​​de ambiente SSH_AUTH_SOCK e SSH_AGENT_PID sejam configuradas com o caminho atual do arquivo de meia de ssh-agent ssh e o número do pid.

ssh-agent -s > temp.txt

Isso salvará a saída do ssh-agent no arquivo. O conteúdo do arquivo de texto será mais ou menos assim:

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

Copie algo como "/tmp/ssh-kjmxRb2764/agent.2764" do arquivo de texto e execute o seguinte comando diretamente no console:

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

Copie algo como "3044" do arquivo de texto e execute o seguinte comando diretamente no console:

set SSH_AGENT_PID=3044

Agora, quando as variáveis ​​de ambiente (SSH_AUTH_SOCK e SSH_AGENT_PID) estiverem definidas para a sessão atual do console, execute o comando ssh-add e ele não falhará novamente ao conectar o agente ssh.


2
Obrigado! Era exatamente disso que eu precisava.
Isócrono

6
Não, ainda é o mesmo.
Jaskey

3
Estas etapas são as mesmas que fazer 'eval $ (ssh-agent)'
K.Nicholas 4/15/18

2
Corrigido no meu Windows 10! Obrigado!
Ntl 01/03

1
Isso realmente me ajudou a salvar o problema no Linux ... só precisava substituir setporexport
greg hor

30

Uma coisa que me deparei foi que evalnão funcionou para mim usando o Cygwin, o que funcionou para mim foi ssh-agent ssh-add id_rsa.

Depois disso, deparei-me com um problema que minha chave privada estava muito aberta, a solução que consegui encontrar para isso ( daqui ):

chgrp Users id_rsa

assim como

chmod 600 id_rsa

finalmente pude usar:

ssh-agent ssh-add id_rsa

Você usou eval `ssh-agent`, com as reticências `ao redor ssh-agent, como mostrado na minha resposta ? Isso funcionou muito bem para mim em Cygwin. Você parece estar certo que ssh-agent ssh-addtambém funciona, pelo menos no msysgit Bash. No entanto, observe que id_rsaé a chave padrão usada, portanto você não precisa especificá-la ssh-agent ssh-add id_rsa.

Eu acredito que eu tinha usado os acentos graves, mas para mim ainda não dados
Vnge

1
OMG, você resolveu minhas poucas horas de frustração. Obrigado!
Chee Loong Soon

Esta resposta funcionou para mim no bash.
Lsakurifaisu

27

Para ampliar a resposta da n3o para o Windows 7 ...

Meu problema é que algumas variáveis ​​de ambiente necessárias não foram definidas e o n3o está correto, pois o ssh-agent diz como definir essas variáveis ​​de ambiente, mas na verdade não as define.

Como o Windows não permite "avaliar", eis o que fazer:

Redirecione a saída do ssh-agent para um arquivo em lotes com

ssh-agent > temp.bat

Agora use um editor de texto como o Bloco de Notas para editar temp.bat. Para cada uma das duas primeiras linhas: - Insira a palavra "conjunto" e um espaço no início da linha. - Exclua o primeiro ponto e vírgula e tudo o que se segue.

Agora exclua a terceira linha. Seu temp.bat deve se parecer com isso:

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

Execute temp.bat. Isso definirá as variáveis ​​de ambiente necessárias para o funcionamento do ssh-add.



Ainda recebo Could not open a connection to your authentication agent.ao executar o ssh-add no Win10 PowerShell.
Kebman 29/08/19

19

Acabei de fazer isso funcionar. Abra seu ~/.ssh/configarquivo.

Anexe o seguinte-

Host github.com
 IdentityFile ~/.ssh/github_rsa

A página que me deu a dica Configure SSH para Git disse que o recuo de espaço único é importante ... embora eu tenha uma configuração aqui do Heroku que não tenha esse espaço e funcione corretamente.


1
Isso não ajuda na digitação da senha da chave SSH.
Alesch

1
Se você não quiser inserir a senha, crie uma chave sem uma. Não há sentido em ter uma senha, se você quiser armazená-la no seu script de qualquer maneira.
Paul Becotte

Esse é o objetivo de usar o ssh-agent. A senha das suas chaves é armazenada em um chaveiro seguro, tratado pelo ssh-agent.
Alesch #

Esta é a melhor resposta para mim aqui. Tive muitos problemas com o ssh-agent iniciando milhares de vezes no Windows 7 e essa armadilha não funcionou. Não me importo de não ter senha no meu computador pessoal em casa.
Fleshgrinder

18

Se você seguir estas instruções, seu problema será resolvido.

Se você estiver em uma máquina Mac ou Linux, digite:

eval "$(ssh-agent -s)"

Se você estiver em uma máquina Windows, digite:

ssh-agent -s

13

Deixe-me oferecer outra solução. Se você acabou de instalar o Git 1.8.2.2 ou próximo e deseja ativar o SSH, siga as instruções bem escritas .

Tudo até a Etapa 5.6, onde você pode encontrar um pequeno obstáculo. Se um agente SSH já estiver em execução, você poderá receber a seguinte mensagem de erro ao reiniciar o bash

Could not open a connection to your authentication agent

Se o fizer, use o comando a seguir para ver se mais de um processo ssh-agent está em execução

ps aux | grep ssh

Se você vir mais de um serviço ssh-agent, precisará matar todos esses processos. Use o comando kill da seguinte maneira (o PID será exclusivo no seu computador)

kill <PID>

Exemplo:

kill 1074

Depois de remover todos os processos do ssh-agent, execute o px aux | comando grep ssh novamente para garantir que eles se foram e reinicie o Bash.

Agora você deve obter algo parecido com isto:

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

Agora você pode continuar na Etapa 5.7 e além.


me passou o bloqueio de estrada, tyvm
Jason Fingar

Só queria acrescentar que, no meu caso, um dos itens listados é o processo grep com o qual estamos fazendo a pesquisa, mas ele já é eliminado após sua execução. Sem trocadilhos.
Ryan Mortensen


13

Para usuários de janelas, descobri que o cmd eval `ssh-agent -s`não funcionava, mas o uso do git bash funcionou bem eval `ssh-agent -s`; ssh-add KEY_LOCATIONe garantir que o serviço Windows "OpenSSH Key Management" não estivesse desativado


12

Nota: esta é uma resposta a esta pergunta , que foi mesclada com esta. Essa pergunta foi para o Windows 7, ou seja, minha resposta foi para Cygwin / MSYS / MSYS2. Este parece ser para algum unix, onde eu não esperaria que o agente SSH precisasse ser gerenciado assim .

Isso executará o agente SSH e autenticará apenas a primeira vez que você precisar , nem sempre que abrir o terminal Bash. Pode ser usado para qualquer programa que use SSH em geral, incluindo ssh propriamente dito e scp. Basta adicionar isso a /etc/profile.d/ssh-helper.sh:

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "$@"; }


2
O processo ssh-agent não parece estar associado ao mesmo terminal usado para executá-lo. Eu acho que ps -A | grep ssh-agentou ps h -C ssh-agentdeveria ser usado em vez deps | grep ssh-agent
alexis 30/03

1
O uso de um hífen no nome da função pode não ser recomendado. Não sei por que, mas leia isso . Por exemplo, descobri que echo ssh-auth | bashfalhará.
314 alexis

1
Você pode simplesmente simplificar um pouco mais. Apenas verifique se está em execução e atribua as variáveis ​​env. E então adicione AddKeysToAgent yes(ou use prompt) à sua entrada ssh config (use Host *para todos os Hosts.) Dessa forma, você só será solicitada a senha SSH se realmente tentar se conectar, caso contrário, poderá ser solicitada uma senha para um simples git diffou git status.
ST-DDT

2
$HOME/.sshpode ser mais robusto do que/home/$(whoami)/.ssh
Ari Sweedler

12

Eu tinha o mesmo problema Ubuntue as outras soluções não me ajudaram. Finalmente percebi qual era o meu problema. Eu criei minhas sshchaves na /root/.sshpasta. Então, mesmo quando eu corri ssh-addcomo root, ele não conseguiu fazer o seu trabalho e continuou dizendo

Could not open a connection to your authentication agent.

Criei minhas chaves públicas e privadas ssh na /home/myUsername/pasta e usei

ssh-agent /bin/sh

então eu corri

ssh-add /home/myUsername/.ssh/id_rsa

e o problema foi resolvido dessa maneira.

Nota: Para acessar seu repositório, gitadicione sua senha git ao criar sshchaves com ssh-keygen -t rsa -C "your git email here".


9

Use o parâmetro -A ao se conectar ao servidor, exemplo:

ssh -A root@myhost

da página do manual:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

O que faz e por quê?
Erikbwork 24/05

conforme página de manual ... man ssh ... -A Ativa o encaminhamento da conexão do agente de autenticação. Isso também pode ser especificado por host em um arquivo de configuração.
Scott Stensland

8

A solução básica para executar ssh-agenté respondida em muitas respostas. No entanto, a execução ssh-agentvárias vezes (por cada terminal aberto ou por login remoto) criará muitas cópias da ssh-agentexecução na memória. Os scripts sugeridos para evitar esse problema são longos e precisam gravar e / ou copiar arquivos separados ou escrever muitas strings em ~/.profileou ~/.schrc. Deixe-me sugerir uma solução simples de duas cordas:

Para sh , bash , etc:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

Para csh , tcsh , etc:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`

O que está aqui:

  • pesquise o processo ssh-agentpelo nome e pelo usuário atual
  • crie um arquivo de script de shell apropriado chamando ssh-agente execute- ssh-agentse se nenhum ssh-agentprocesso do usuário atual for encontrado
  • avaliar o shell script criado que configura o ambiente apropriado

Não é necessário proteger o script shell criado ~/.ssh-agent.tcshou o ~/.ssh-agent.shacesso de outros usuários porque: a comunicação inicial com ssh-agenté processada através do soquete protegido, que não é acessível a outros usuários, e, no segundo momento, outros usuários podem encontrar o ssh-agentsoquete simples por arquivos de enumeração no /tmp/diretório. Quanto ao acesso ao ssh-agentprocesso, são as mesmas coisas.


6

Tente o seguinte:

ssh-agent sh -c 'ssh-add && git push heroku master'

1
Parece uma maneira limpa de fazer isso.
Leon Grapenthin

6

Leia a resposta do @ cupcake para obter explicações. Aqui eu apenas tento automatizar a correção.

Se você estiver usando o terminal Cygwin com BASH, adicione o seguinte ao arquivo $ HOME / .bashrc. Isso inicia o ssh-agent apenas uma vez no primeiro terminal Bash e adiciona as chaves ao ssh-agent. (Não tenho certeza se isso é necessário no Linux)

###########################
# start ssh-agent for
# ssh authentication with github.com
###########################
SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh
if [ ! -e $SSH_AUTH_SOCK_FILE ]; then
    # need to find SSH_AUTH_SOCK again.
    # restarting is an easy option
    pkill ssh-agent
fi
# check if already running
SSH_AGENT_PID=`pgrep ssh-agent`
if [ "x$SSH_AGENT_PID" == "x" ]; then
#   echo "not running. starting"
    eval $(ssh-agent -s) > /dev/null
    rm -f $SSH_AUTH_SOCK_FILE
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE
    ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null
#else
#   echo "already running"
fi
source $SSH_AUTH_SOCK_FILE

NÃO SE ESQUEÇA de adicionar as chaves corretas no comando "ssh-add".


5

Eu tive esse problema, quando iniciei o ssh-agent, quando ele já estava em execução. Fica confuso. Para ver se é esse o caso, use

eval $(ssh-agent)

para ver se é o mesmo que você pensou que deveria ser. No meu caso, era diferente do que acabei de iniciar.

Para verificar ainda mais se você possui mais de um agente ssh em execução, pode revisar:

ps -ef | grep ssh

2
Eu acho que correr eval $(ssh-agent)deve criar um novo agente com um PID diferente toda vez, embora eu possa estar errado.

4

Eu tive um problema semelhante quando estava tentando fazer isso funcionar no Windows para conectar-se ao stash via ssh

Aqui está a solução que funcionou para mim.

  1. Acontece que eu estava executando o agente Pageant ssh na minha caixa do Windows - verificaria o que você está executando. Eu suspeito que é Pageant, pois vem como padrão com Putty e winScp

  2. O ssh-add não funciona na linha de comandos com este tipo de agente

  3. Você precisa adicionar a chave privada através da janela da interface do usuário do concurso, que pode ser obtida clicando duas vezes no ícone Pageant na barra de tarefas (uma vez iniciado).

  4. Antes de adicionar a chave ao Pageant, você precisa convertê-la para o formato PPK. Instruções completas estão disponíveis aqui Como converter a chave SSH para o formato ppk

  5. É isso. Depois de carregar minha chave no stash, pude usar o SourceTree para criar um repositório local e clonar o controle remoto.

Espero que isto ajude...


3

Resolvi o erro forçando o processo de interrupção (eliminado) do git (agente ssh), desinstalando o Git e instalando o Git novamente.


2
Eu suspeito que tudo que você precisava fazer era matar todos os processos existentes do agente e, em seguida, reiniciar um, em vez de precisar reinstalar o Git.

3

Usando o Git Bash no Win8.1E, minha resolução foi a seguinte:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

Por que é necessário produzir para /dev/null? Sua resposta basicamente faz exatamente a mesma coisa que esta .

Além disso, gostaria de salientar que essa ~/.ssh/id_rsaé a chave padrão, portanto você não precisa especificar ssh-add ~/.ssh/id_rsa, apenas ssh-adddeve funcionar.

Eu tentei a sua solução neste mesmo ambiente @Cupcake, não funciona. Também não entendo por que essa é a resposta, mas, a menos que eu fiz dessa maneira, nunca funcionou.
Nighliber

3

Se você estiver usando o Putty, talvez seja necessário definir a opção "Conexão / SSH / Autenticação / Permitir encaminhamento de agente" como "true".

insira a descrição da imagem aqui


3

Isso funcionou para mim.

Na janela CMD, digite o seguinte comando:

cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add path/to/.ssh/id_rsa

3

Para o bash incorporado no Windows 10, adicionei isso ao .bash_profile:

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi

1
Não sei por que você cola tanto texto se você poderia simplesmente chamar $(ssh-agent -s)para definir o ambiente do agente.
Erikbwork 24/05

1
Isso funcionou para mim quando o usei pela primeira vez. Porém, após a reinicialização do sistema, o problema ficou ainda pior. Com ssh não trabalhar em tudo mais. Não recomendado.
yspreen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.