Skip to main content

Enterprise Server 3.15 está disponível no momento como versão release candidate.

Usar o encaminhamento de agente SSH

Para simplificar a implantação em um servidor, você pode configurar o encaminhamento do agente para usar as chaves SSH locais de forma segura.

O encaminhamento do agente SSH pode ser usado para simplificar a implantação em um servidor. Isso permite que você use suas chaves SSH locais em vez de deixar as chaves (sem frase secreta!) no seu servidor.

Se você já tiver configurado uma chave SSH para interagir com o GitHub Enterprise Server, provavelmente, estará familiarizado com o ssh-agent. É um programa que é executado em segundo plano e mantém sua chave carregada na memória para que você não precise digitar a sua frase secreta toda vez que precisar usar a chave. O mais bacana é que você pode optar por permitir que os servidores acessem o ssh-agent local como se eles já estivessem em execução no servidor. Isso é como pedir a um amigo para digitar sua senha para que você possa usar o computador.

Confira o guia Tech Tips de Steve Friedl para obter uma explicação mais detalhada do encaminhamento do agente SSH.

Configurar o encaminhamento do agente SSH

Certifique-se de que sua própria chave SSH esteja configurada e funcionando. Use nosso guia para gerar chaves SSH se ainda não tiver feito isso.

Você pode testar se a chave local funciona inserindo ssh -T git@hostname no terminal:

$ ssh -T git@hostname
# Attempt to SSH in to github
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide
> shell access.

Começamos bem. Vamos configurar SSH para permitir o encaminhamento de agentes para o seu servidor.

  1. Usando seu editor de texto favorito, abra o arquivo em ~/.ssh/config. Se esse arquivo não existir, você pode criá-lo digitando touch ~/.ssh/config no terminal.

  2. Insira o seguinte texto no arquivo, substituindo example.com pelo nome de domínio ou pelo IP do servidor:

     Host example.com
       ForwardAgent yes
    

Aviso: talvez você tenha a tentação de usar um curinga como Host * para apenas aplicar essa configuração a todas as conexões SSH. Essa não é realmente uma boa ideia, pois você estará compartilhando suas chaves SSH locais com cada servidor em que você executa o SSH. Eles não terão acesso direto às chaves, mas poderão usá-las como você enquanto a conexão estiver estabelecida. Você deve adicionar apenas servidores em que confia e que pretende usar com o encaminhamento de agente.

Testar o encaminhamento de agente SSH

Para testar se o encaminhamento de agente está funcionando com o servidor, entre com o SSH no servidor e execute ssh -T git@hostname mais uma vez. Se tudo correr bem, você retornará à mesma mensagem apresentada quando você fez localmente.

Se não tiver certeza de se a chave local está sendo usada, inspecione também a variável SSH_AUTH_SOCK no servidor:

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/ssh-4hNGMk8AZX/agent.79453

Se a variável não estiver definida, significa que o encaminhamento de agentes não está funcionando:

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> [No output]
$ ssh -T git@hostname
# Try to SSH to github
> Permission denied (publickey).

Solucionar problemas de encaminhamento de agente SSH

Aqui estão algumas coisas a serem analisadas quando o agente SSH for encaminhado para solução de problemas.

Você deve estar usando uma URL com SSH para fazer check-out do código

O encaminhamento de SSH só funciona com URLs com SSH, e não com URLs com HTTP(s). Verifique o arquivo .git/config no servidor e garanta que a URL seja uma URL no estilo SSH, como a mostrada abaixo:

[remote "origin"]
  url = git@hostname:YOUR_ACCOUNT/YOUR_PROJECT.git
  fetch = +refs/heads/*:refs/remotes/origin/*

As suas chaves SSH devem funcionar localmente

Antes de fazer suas chaves funcionarem por meio do encaminhamento de agentes, primeiro elas devem funcionar localmente. Nosso guia sobre como gerar chaves SSH pode ajudar você a configurar suas chaves SSH localmente.

Seu sistema deve permitir o encaminhamento do agente SSH

Às vezes, as configurações do sistema não permitem o encaminhamento do agente SSH. Você pode verificar se um arquivo de configuração do sistema está sendo usado digitando o seguinte comando no terminal:

$ ssh -v URL
# Connect to the specified URL with verbose debug output
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Applying options for example.com
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
$ exit
# Returns to your local command prompt

No exemplo acima, o arquivo ~/.ssh/config é carregado primeiro e, em seguida /etc/ssh_config é lido. Podemos inspecionar esse arquivo para ver se está sobrescrevendo nossas opções, ao executar os seguintes comandos:

$ cat /etc/ssh_config
# Print out the /etc/ssh_config file
> Host *
>   SendEnv LANG LC_*
>   ForwardAgent no

Neste exemplo, o arquivo /etc/ssh_config indica especificamente ForwardAgent no, que é uma forma de bloquear o encaminhamento de agente. A exclusão desta linha do arquivo deverá fazer com que o encaminhamento de agentes funcionando mais uma vez.

Seu servidor deve permitir o encaminhamento do agente SSH em conexões de entrada

O encaminhamento de agentes também pode ser bloqueado no seu servidor. Você pode verificar se o encaminhamento de agente é permitido entrando com SSH no servidor e executando sshd_config. A saída desse comando deve indicar que AllowAgentForwarding está definido.

O ssh-agent local precisa estar em execução

Na maioria dos computadores, o sistema operacional inicia ssh-agent automaticamente. No entanto, é necessário que isso seja feito manualmente no Windows. Temos um guia sobre como iniciar o ssh-agent sempre que você abrir o Git Bash.

Para verificar se ssh-agent está em execução no computador, digite o seguinte comando no terminal:

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners

A chave precisa estar disponível para o ssh-agent

Verifique se a chave está visível para o ssh-agent executando o seguinte comando:

ssh-add -L

Se o comando disser que nenhuma identidade está disponível, você deverá adicionar sua chave:

ssh-add YOUR-KEY

No macOS, o ssh-agent "esquecerá" essa chave depois que ele for reiniciado durante as reinicializações. No entanto, você poderá importar suas chaves SSH para o Keychain usando este comando:

ssh-add --apple-use-keychain YOUR-KEY

Observação: a opção --apple-use-keychain armazena a frase secreta no seu conjunto de chaves quando você adiciona uma chave SSH ao ssh-agent. Se você optou por não adicionar uma frase secreta à chave, execute o comando sem a opção --apple-use-keychain.

A opção --apple-use-keychain está na versão padrão da Apple de ssh-add. Em versões do macOS anteriores à Monterey (12.0), os sinalizadores --apple-use-keychain e --apple-load-keychain usavam a sintaxe -K e -A, respectivamente.

Caso não tenha a versão standard de ssh-add da Apple instalada, você poderá receber uma mensagem de erro. Para obter mais informações, confira "Erro: ssh-add: opção ilegal -- apple-use-keychain".

Se você continuar recebendo avisos para fornecer sua frase secreta, talvez seja necessário adicionar o comando ao arquivo ~/.zshrc (ou ao arquivo ~/.bashrc para bash).