Tive também este problema quando tentei implementar algum código usando Capistrano . Muito frustrante. Aqui estão dois métodos que conheço para lidar com esta questão.
Método 1: Adicionar todas as chaves conhecidas ao agente SSH.
Assim, uma solução que encontrei é correr ssh-add
com a opção -A
- que adiciona todas as identidades conhecidas ao agente SSH usando qualquer frase-chave armazenada no seu porta-chaves como esta:
ssh-add -A
Agora isto funciona mas não vai persistir através de reinicializações. Portanto, se nunca mais se quiser preocupar com isto, basta abrir o ficheiro ~/.bash_profile
do seu utilizador desta forma:
nano ~/.bash_profile
E adicione esta linha ao fundo do ecrã:
ssh-add -A 2>/dev/null;
Agora, quando abrir uma nova janela de Terminal, tudo deve ser bom!
Método 2: Adicione somente chaves SSH que estão no porta-chaves ao agente.
Assim, embora a opção ssh-add -A
deva funcionar para a maioria dos casos básicos, deparei-me recentemente com um problema onde tinha 6-7 caixas Vagrant (que usa chaves/identidades SSH para acesso) configuradas numa máquina em cima das id_rsa.pub
mais comuns no local.
Resumindo, acabei por ser bloqueado fora de um servidor remoto devido a demasiadas tentativas falhadas baseadas em chaves/identidades SSH, uma vez que o acesso ao servidor se baseava numa palavra-chave e as chaves/identidades SSH são chaves/identidades SSH. Assim, o agente SSH tentou todas as minhas chaves SSH, falhou e eu nem sequer consegui chegar ao prompt da palavra-passe.
O problema é que ssh-add -A
apenas adicionará arbitrariamente ao agente todas as chaves/identidades SSH que tiver, mesmo que não seja necessário fazê-lo; tal como no caso das caixas Vagrant.
A minha solução após muitos testes foi a seguinte.
Primeiro, se tiver mais chaves/identidades SSH adicionadas ao seu agente do que precisa - como mostrado com ssh-add -l
depois purge-as todas do agente assim:
ssh-add -D
Com isso feito, então comece o agente SSH como um processo de fundo assim:
eval "$(ssh-agent -s)"
Agora, torna-se estranho e não estou muito certo do porquê. Em alguns casos, é possível adicionar especificamente a chave/identidade ~/.ssh/id_rsa.pub
ao agente desta forma:
ssh-add ~/.ssh/id_rsa.pub
Digite na sua frase-chave, prima Return e deverá estar pronto para ir.
Mas em outros casos, basta simplesmente correr isto para ter a chave/identidade adicionada:
ssh-add -K
Se tudo isto funcionar, escreva ssh-add -l
e deverá ver uma única chave/identidade SSH listada.
Todos bons? Agora abra o seu .bash_profile
:
nano ~/.bash_profile
E adicione esta linha ao fundo; comente ou remova a versão -A
se a tiver no lugar:
ssh-add -K 2>/dev/null;
Isso permitirá que a chave/identidade SSH seja recarregada ao agente SSH em cada arranque/boot.
UPDATE: A Apple adicionou agora uma opção UseKeychain
às opções de configuração SSH abertas e considera ssh-add -A
também uma solução.
A partir de macOS Sierra 10.12.2, a Apple (presumo) adicionou uma opção UseKeychain
de configuração para as configurações SSH. Verificando a página man (via man ssh_config
) mostra a seguinte informação:
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''.
O que se resume à Apple vendo a solução como ou adicionar ssh-add -A
ao seu .bash_profile
como explicado neste bilhete de Radar Aberto ou adicionar UseKeychain
como uma das opções num ~/.ssh/config
por utilizador.