Eu tive esse problema também ao tentar implantar algum código usando o Capistrano . Muito frustrante. Aqui estão dois métodos que conheço para lidar com esse problema.
Método 1: Adicione todas as chaves conhecidas ao agente SSH.
Portanto, uma solução que encontrei é executar ssh-add
com a -A
opção - que adiciona todas as identidades conhecidas ao agente SSH usando as frases secretas armazenadas em seu conjunto de chaves - assim:
ssh-add -A
Agora isso funciona, mas não vai persistir durante as reinicializações. Então, se você nunca quer se preocupar com isso novamente, basta abrir o ~/.bash_profile
arquivo do seu usuário assim:
nano ~/.bash_profile
E adicione essa linha ao final:
ssh-add -A 2>/dev/null;
Agora, quando você abrir uma nova janela do Terminal, tudo deve ser bom!
Método 2: Adicione somente chaves SSH que estão no keychain ao agente.
Portanto, embora a ssh-add -A
opção deva funcionar na maioria dos casos básicos, encontrei um problema recentemente em que tinha 6-7 caixas Vagrant (que usam chaves SSH / identidades para acesso) configuradas em uma máquina sobre as mais comuns id_rsa.pub
no lugar.
Para encurtar a história, acabei sendo bloqueado de um servidor remoto devido a muitas tentativas mal-sucedidas com base em identidades / chaves SSH, pois o acesso ao servidor era baseado em uma senha e as chaves / identidades SSH são chaves / identidades SSH. Assim, o agente SSH tentou todas as minhas chaves SSH, falhou e eu não consegui nem chegar ao prompt da senha.
O problema é que ssh-add -A
apenas adicionará arbitrariamente cada chave / identidade SSH ao agente, mesmo que não seja necessário fazê-lo; como no caso das caixas Vagrant.
Minha solução depois de muitos testes foi a seguinte.
Primeiro, se você tiver mais identidades / chaves SSH adicionadas ao seu agente do que o necessário, como mostrado ssh-add -l
, elimine todas elas do agente da seguinte forma:
ssh-add -D
Feito isso, inicie o agente SSH como um processo em segundo plano como:
eval "$(ssh-agent -s)"
Agora, fica estranho e não tenho certeza do porquê. Em alguns casos, você pode adicionar especificamente a ~/.ssh/id_rsa.pub
chave / identidade ao agente da seguinte forma:
ssh-add ~/.ssh/id_rsa.pub
Digite sua frase-senha, clique em Returne você deve estar pronto para ir.
Mas em outros casos, basta executar isso para obter a chave / identidade adicionada:
ssh-add -K
Se tudo isso funcionar, digite ssh-add -l
e você deverá ver uma única chave / identidade SSH listada.
Tudo bom? Agora abra seu .bash_profile
:
nano ~/.bash_profile
E adicione esta linha ao fundo; comentar ou remover a -A
versão se você tiver isso no lugar:
ssh-add -K 2>/dev/null;
Isso permitirá que a chave / identidade SSH seja recarregada no agente SSH em cada inicialização / reinicialização.
ATUALIZAÇÃO: A Apple agora adicionou uma UseKeychain
opção às opções de configuração de SSH abertas e também considera ssh-add -A
uma solução.
A partir do macOS Sierra 10.12.2, a Apple (eu suponho) adicionou uma UseKeychain
opção de configuração para as configurações do SSH. Verificar a página do manual (via man ssh_config
) mostra as seguintes informações:
UseKeychain
On macOS, specifies whether the system should search for
passphrases in the user's keychain when attempting to use a par-
ticular key. When the passphrase is provided by the user, this
option also specifies whether the passphrase should be stored
into the keychain once it has been verified to be correct. The
argument must be ``yes'' or ``no''. The default is ``no''.
Qual se resume a Apple vendo a solução como adicionar ssh-add -A
ao seu .bash_profile
conforme explicado neste ticket Open Radar ou adicionando UseKeychain
como uma das opções em um por usuário ~/.ssh/config
.