ssh-agent precisa ser iniciado toda vez no meu servidor

3

Eu usei este tutorial de bitbucket para fornecer acesso ssh ao repositório git: link

Mas agora, toda vez que eu quiser usar o git, ele diz que não tenho permissões até que eu faça:

ssh-agent /bin/bash
&&
ssh-add ~/.ssh/id_rsa

por que isso está acontecendo? Eu fiz isso facilmente na minha máquina local, mas o servidor remoto não está funcionando bem.

atualizar

quando faço

ssh-agent

Eu entendo isso

SSH_AUTH_SOCK=/tmp/ssh-blGr6z5dJjit/agent.14183; export SSH_AUTH_SOCK;
SSH_AGENT_PID=14184; export SSH_AGENT_PID;
echo Agent pid 14184;

mas do que eu tento fazer git fetch, eu entendo isso:

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

mesmo depois de adicionar a chave

ssh-add ~/.ssh/bitbucket

Eu recebo este erro

Could not open a connection to your authentication agent.
    
por Tzook Bar Noy 04.05.2014 / 20:17

2 respostas

4

A pergunta foi um pouco incerta, então essa resposta pode realmente ser uma questão diferente. Mas como a resposta ainda pode ser útil para os outros, acho que vale a pena mantê-la por perto.

Quando você digita ssh-agent /bin/bash , é iniciada uma instância de ssh-agent, que continuará em execução enquanto esse shell estiver ativo. Por padrão, o ssh-agent será usado apenas por esse shell e terminará assim que você fechar esse shell.

Se, em vez disso, você digitar apenas ssh-agent , um agente será iniciado em segundo plano, que continuará em execução, mesmo se você fechar o shell. O comando ssh-agent irá imprimir comandos no stdout, que podem ser digitados para começar a usar o ssh-agent. Você teria que digitar esses comandos a cada vez.

Você pode iniciar um agente ssh em segundo plano e começar a usá-lo no shell atual digitando eval $(ssh-agent) . No entanto, você teria que armazenar a variável de ambiente SSH_AUTH_SOCK em algum lugar e configurá-la se você fizer login novamente.

Com essas informações básicas em funcionamento, tenho três sugestões sobre como fazer com que o agente esteja sempre disponível.

  • Use uma sessão de tela no servidor. Quando você iniciar o tipo de tela eval $(ssh-agent) ; screen , esse agente permanecerá em execução no servidor e, se você se conectar a essa tela novamente mais tarde, ele ainda se lembrará de qual agente usar.
  • Insira comandos em seu arquivo ~/.bash_profile para localizar o agente ativo, se houver um e defina a variável de ambiente SSH_AUTH_SOCK .
  • Use o encaminhamento do agente ssh para usar o agente no cliente em vez de um no servidor. Certifique-se de compreender as implicações de segurança disso, antes de usá-lo.

Encontrar o agente ssh de ~/.bash_profile pode ser feito com um script parecido com este

#!/bin/bash

for P in /tmp/ssh-*/agent.*
do
    if [ -O "$P" ] && [ -O "$(dirname "$P")" ]
    then
        L=$(SSH_AUTH_SOCK="$P" timeout 1s ssh-add -l > >(wc -l))
        case $? in
            0)
                echo "$L $P"
                ;;
            1)
                echo "0 $P"
                ;;
        esac
    fi &
done | sort -rn | if read N P
then
    echo "SSH_AUTH_SOCK='$P'; export SSH_AUTH_SOCK"
else
    ssh-agent
fi

O qual pode ser invocado a partir de ~/.bash_profile , como este eval $(find-agent) (assumindo que o script foi denominado find-agent.)

    
por 04.05.2014 / 20:36
0

Um comando ssh pode falhar com a mensagem de erro Permission denied (publickey). , mas funcionará se você carregar a mesma chave em um agente antecipadamente, se tiver configurado incorretamente o cliente ssh.

Por padrão, ssh e ssh-add carregarão as chaves dos mesmos locais, portanto, as duas encontrarão a chave necessária ou nenhuma delas a encontrará. No entanto, em /etc/ssh/ssh_config e ~/.ssh/config , você pode substituir o caminho usado por ssh pela configuração IdentityFile .

Se ~/.ssh/config contiver uma configuração IdentityFile incorreta, você verá os sintomas descritos em sua postagem.

    
por 05.05.2014 / 12:51