ssh-add reclama: Não foi possível abrir uma conexão com seu agente de autenticação

151

Eu tenho tentado ssh-addtrabalhar em um RaspberryPi executando o Raspbian.

Eu posso começar ssh-agent, quando o faço, fornece a seguinte saída no terminal:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

Se eu correr ps aux | grep ssh, posso ver que está correndo.

Em seguida, tento executar ssh-addpara adicionar minha senha de chave e obtenho o seguinte:

Could not open a connection to your authentication agent.

Alguma ideia?

Daniel Groves
fonte
6
Tenteeval $(ssh-agent)
Ulrich Dangel

Respostas:

224

Seu shell deve avaliar esse código de shell produzido por ssh-agent. Execute isso:

eval "$(ssh-agent)"

Ou se você já iniciou o ssh-agent, copie e cole no prompt do shell (assumindo que você esteja executando um shell semelhante ao Bourne).

sshOs comandos precisam saber como conversar com ssh-agenteles, eles sabem disso pela SSH_AUTH_SOCKvariável de ambiente.

Stéphane Chazelas
fonte
Obrigado, eu não entendi direito como isso funciona. Isso é muito apreciado.
Daniel Groves
2
Ou você pode digitar ssh-agente bash e após o ssh-add vai funcionar
RaduM
@ Stephanie, eu entendi corretamente que o comando ssh-agent apenas imprime a saída de sua execução enquanto a versão eval realmente executa o comando?
quer
5
@DenysS. Bem, não, ele faz sua configuração e depois diz ao seu shell como atualizar seu ambiente para poder entrar em contato com ele. Não pode fazer isso por si só. Ele pode iniciar um novo shell com o ambiente atualizado (é o que ssh-agent bashfaz), mas não pode atualizar a memória de um processo separado executando um comando externo (seu shell já está em execução).
Stéphane Chazelas
@StephaneChazelas, se o meu ssh-agent for iniciado na inicialização, mas ainda precisar avaliá-lo no meu shell, significa que ele não é avaliado automaticamente para cada shell e deve ser configurado de alguma forma pelo usuário root?
quer
27

Tente este:

$ ssh-agent /bin/sh
$ ssh-add $yourkey
user48656
fonte
5
Isso realmente funcionou para mim, onde nenhuma das outras respostas funcionou.
Joseph Snow
2
Se você estiver usando a casca de peixe, esta resposta funcionará. ssh-agent /usr/bin/fish.
slackmart
1
Eu recebo um erro: " Não foi possível abrir uma conexão com seu agente de autenticação. "
IgorGanapolsky
@slackmart Se você instalou o peixe no BSD, sua localização é /usr/local/bin/fish(alternativamente /usr/ports/shells/fish). Agradeça ao whereiscomando por me ajudar a descobrir isso.
Cjm 26/08/16
Ótimo @cjm, eu uso o Slackware Linux, e esse é o caminho que funciona para mim.
slackmart
12

Esta questão também foi muito bem abordada no Stackoverflow .

eval `ssh-agent -s`

ssh-add
xaa
fonte
Você esqueceu as aspas `...`. Sem eles, o operador split + glob é chamado na saída.
Stéphane Chazelas
6

Se você usar o csh como um shell ( PI do FreeBSD ), isso poderá funcionar:

eval `ssh-agent -c`

Em seguida, você só precisa fazer algo como:

ssh-add ~/.ssh/id_rsa
nbari
fonte
Eu recebo um erro: " Não foi possível abrir uma conexão com seu agente de autenticação. "
IgorGanapolsky
2

Você também pode usar a seguinte sintaxe:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'
kenorb
fonte
Isso não está funcionando para mim, se você for ssh-agent sh -c "ssh-add -l", vai dizer que você não tem identidades.
Ain Tohvri 01/07
Como você deve adicioná-lo primeiro, por exemplo: ssh-agent sh -c "ssh-add && ssh-add -l"imprimirá sua identidade.
Kenorb # 03/07
1

Tente o seguinte: vá para C:\$Installation_Folder$\Git\cmd e execute:

start-ssh-agent 

Ele abrirá um comando cmd e será executado da ssh-agentmaneira certa.

ssh-add ~/.ssh/id_rsa deve então funcionar.

sab125
fonte
" bash: start-ssh-agent: comando não encontrado "
IgorGanapolsky 12/08
1

Isso foi confuso e tem 2 possíveis boas respostas, dependendo se o usuário está tentando adicionar uma chave ssh no Linux ou no Windows (como eu sou). Provavelmente isso não responde ao OP, mas é uma expansão para o git-bash. Eu executo o Windows e o Ubuntu para desenvolvimento, e minha instalação do git é um pouco diferente em cada uma.

Tente isso: vá para C: \ $ Installation_Folder $ \ Git \ cmd e execute:

start-ssh-agent Ele abrirá um comando cmd e executará o ssh-agent da maneira correta.

.. foi uma boa resposta do Windows, mas falhou ao especificar que você deveria acessar o Windows Explorer para encontrar a pasta de instalação do Git e executar o shell do Windows aberto após a conclusão da etapa 1.
"vá para C: \ $ Installation_Folder $ \ Git \ cmd "

Etapa 2: você só precisa clicar duas vezes

start-ssh-agent

Na etapa 3, você volta ao git-bash ou ao emulador de terminal * nix em execução e executa o ssh-add. Se você usou o nome padrão para a chave pública ssh, não precisa adicionar o nome, pois o ssh-add usa isso automaticamente.

Wolf Halton
fonte
1

Existem algumas maneiras se você deseja usar uma identidade com o sudo, por exemplo sudo npm install.

Longo caminho , mas também oferece acesso root, para que você não precise usar sudomuito.

  1. Executar
    sudo ssh-agent bash
    Isso pedirá sua senha e depois será executado ssh-agentcom os privilégios do superusuário,
  2. Navegue para a pasta .ssh dos usuários
    cd /home/user/.ssh
  3. De lá você pode correr

    ssh-add id_rsa
    npm install git+ssh://git@YOUR-PROJECT-URL -g && npm link PROJECT-NAME
    

Maneira curta , apenas seu usuário (a menos que você queira sudo muito)

eval "$(ssh-agent)"
ssh-add
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install git+ssh://git@PROJECT-URL -g && sudo npm link PROJECT-NAME
Belldandu
fonte
exporte evalfunciona tão bem quanto o root, desde que o shell de login do root seja semelhante ao Bourne. Se o shell do root for csh ou tcsh, use #eval `ssh-agent -c`
Stéphane Chazelas
Note que você também pode dar rootacesso ao seu ssh-agente fazendosudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas
Tentei ambos também bash é Bourne novamente shell e nem funcionou corretamente. todos os usuários na minha instância do debian jessie, incluindo root, estão configurados para usar o bash por padrão.
Belldandu
O que você tentou? eval "$(ssh-agent)"no prompt de um shell bash executando como root funcionará. Obviamente, você precisará executar a sshpartir desse shell ou de seu descendente para que eles herdem a var env SSH_AUTH_SOCK. eval "$(sudo ssh-agent)"; sudo ssh...não funcionará porque, sudopor padrão, não passa o SSH_AUTH_SOCK env var.
Stéphane Chazelas
Eu tentei eval "$(ssh-agent)"ficar olhando mais tarde para ver se há algum tipo de erro de configuração. Embora a maneira atual que forneço a este guia permita controle livre sobre o usuário que você deseja ser, já que você já é root, e pode acessar qualquer usuário id_rsa que esteja no servidor. Então, uma vez que eu funcione adequadamente, edite minha resposta.
22415 Belldandu