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á configurou uma chave SSH para interagir com GitHub Enterprise Server, você provavelmente está 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 fato é que você pode optar por deixar os servidores acessarem seu ssh-agent local
como se 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 das Dicas Técnicas de Steve Friedl para obter uma explicação mais detalhada sobre encaminhamento do agente SSH.
Configurar o encaminhamento do agente SSH
Certifique-se de que sua própria chave SSH esteja configurada e funcionando. Você pode usar nosso guia sobre a geração de chaves SSH, caso ainda não tenha feito isso.
Você pode testar se a chave local funciona, inserindo ssh -T git@nome de host
no terminal:
$ ssh -T git@hostname
# Attempt to SSH in to github
> Hi username! Você autenticou com sucesso, mas o GitHub não fornece
> acesso shell.
Começamos bem. Vamos configurar SSH para permitir o encaminhamento de agentes para o seu servidor.
-
Usando o seu editor de texto favorito, abra o arquivo em
~/.ssh/config
. Se este arquivo não existir, você poderá criá-lo digitandotouch ~/.ssh/config
no terminal. -
Digite o seguinte texto no arquivo, substituindo
example.com
pelo nome do domínio ou IP do seu servidor:Host example.com ForwardAgent yes
Aviso: Você pode estar tentado a usar um caractere curinga como Host *
para aplicar esta configuração em todas as conexões SSH. Na verdade, isso não é uma boa ideia, já que você iria compartilhar suas chaves SSH locais com todos os servidores que ingressar com SSH. Eles não terão acesso direto � s chaves, mas serão poderão usá-las como você enquanto a conexão for estabelecida. Você deve adicionar apenas os servidores em que confia e que pretende usar com o encaminhamento de agentes.
Testar o encaminhamento de agente SSH
Para testar se o encaminhamento de agente está funcionando com seu servidor, você pode ingressar por SSH no servidor e executar ssh -T git@nome de host
mais uma vez. Se tudo correr bem, você retornará � mesma mensagem apresentada quando você fez localmente.
Se você não tiver certeza se sua chave local está sendo usada, você também poderá inspecionar a variável SSH_AUTH_SOCK
no seu 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 seu servidor e certifique-se de que a URL está na forma SSH, conforme abaixo:
[remote "origin"]
url = git@hostname:yourAccount/yourProject.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 ajudá-lo 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 example.com
# Connect to example.com 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 /etc/ssh_config
é lido em seguida. 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, nosso arquivo /etc/ssh_config
diz especificamente ForwardAgent no
, que é uma maneira de bloquear o encaminhamento de agentes. 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 do agente é permitido pelo SSHing no servidor e executar sshd_config
. A saída deste comando deve indicar que AllowAgentForwarding
foi configurado.
Seu ssh-agent
deve estar em execução
Na maioria dos computadores, o sistema operacional inicia automaticamente ssh-agent
para você. No entanto, é necessário que isso seja feito manualmente no Windows. Temos um guia sobre como iniciar ssh-agent
sempre que você abrir o Git Bash.
Para verificar se ssh-agent
está em execução no seu computador, digite o seguinte comando no terminal:
$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners
Sua chave deve estar disponível para ssh-agent
Você pode verificar se sua chave está visível para 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 yourkey
No macOS, ssh-agent
irá "esquecer" essa chave, assim que ela for reiniciada durante reinicializações. No entanto, você poderá importar suas chaves SSH para o Keychain usando este comando:
$ ssh-add -K yourkey