Também tive esse problema 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 opção -A
, que adiciona todas as identidades conhecidas ao agente SSH usando quaisquer senhas armazenadas no seu chaveiro - assim:
ssh-add -A
Agora, isso funciona, mas não vai durar nas reinicializações. Então, se você não quiser mais se preocupar com isso, basta abrir o arquivo ~/.bash_profile
do seu usuário assim:
nano ~/.bash_profile
Adicione essa linha ao final:
ssh-add -A 2>/dev/null;
Agora, quando você abre uma nova janela do Terminal, tudo deve ser bom!
Método 2: Adicione apenas chaves SSH que estão no keychain ao agente.
Portanto, embora a opção ssh-add -A
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 em cima de mais id_rsa.pub
comum no lugar.
Para encurtar a história, acabei sendo bloqueado de um servidor remoto devido a muitas tentativas falhas com base nas chaves / identidades SSH, pois o acesso ao servidor era baseado em uma senha e as chaves / identidades SSH eram chaves / identidades SSH. Então, o agente SSH tentou todas minhas chaves SSH, falhou e eu nem consegui acessar o prompt da senha.
O problema é que ssh-add -A
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 após muitos testes foi a seguinte.
Primeiro, se você tiver mais chaves / identidades SSH adicionadas ao seu agente do que o necessário, conforme mostrado em ssh-add -l
, elimine-as do agente assim:
ssh-add -D
Feito isso, inicie o agente SSH como um processo em segundo plano da seguinte forma:
eval "$(ssh-agent -s)"
Agora, fica estranho e não sei bem por quê. Em alguns casos, você pode adicionar especificamente a ~/.ssh/id_rsa.pub
key / identity ao agente da seguinte forma:
ssh-add ~/.ssh/id_rsa.pub
Digite sua senha, tecle Return e você deve estar pronto.
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ê verá uma única chave / identidade SSH listada.
Tudo bem? Agora abra seu .bash_profile
:
nano ~/.bash_profile
E adicione essa linha ao final da página; comentar ou remover a versão -A
se você tiver isso em vigor:
ssh-add -K 2>/dev/null;
Isso permitirá que a chave / identidade do SSH seja recarregada no agente SSH em cada inicialização / reinicialização.
ATUALIZAÇÃO: A Apple adicionou uma opção UseKeychain
às opções de configuração SSH abertas e também considera ssh-add -A
uma solução.
A partir do macOS Sierra 10.12.2, a Apple (suponho) adicionou uma opção UseKeychain
config 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 resume a Apple a ver a solução como adicionando ssh-add -A
ao seu .bash_profile
como explicado neste bilhete do Radar Aberto ou adicionando UseKeychain
como uma das opções em um usuário ~/.ssh/config
.