Eu tive esse problema também ao tentar implantar algum código usando o Capistrano . Muito frustrante. Aqui estão dois métodos que eu 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 quaisquer senhas armazenadas no seu conjunto de chaves - da seguinte maneira:
ssh-add -A
Agora isso funciona, mas não persistirá durante as reinicializações. Portanto, se você nunca mais se preocupar com isso, abra o ~/.bash_profile
arquivo do usuário assim:
nano ~/.bash_profile
E adicione esta linha na parte inferior:
ssh-add -A 2>/dev/null;
Agora, quando você abre uma nova janela do Terminal, tudo deve ficar bom!
Método 2: Adicione apenas chaves SSH que estão no conjunto de chaves ao agente.
Portanto, embora a ssh-add -A
opção funcione nos casos mais básicos, encontrei recentemente um problema em que havia 6-7 caixas do Vagrant (que usam chaves / identidades SSH para acesso) configuradas em uma máquina, além das mais comuns id_rsa.pub
.
Para encurtar a história, acabei sendo bloqueado de um servidor remoto devido a muitas tentativas falhas com base em chaves / identidades SSH, uma vez que o acesso ao servidor foi baseado em uma senha e as chaves / identidades SSH são chaves / identidades SSH. Portanto, o agente SSH tentou todas as minhas chaves SSH, falhou e eu nem consegui acessar o prompt de senha.
O problema é que ssh-add -A
você adiciona arbitrariamente todas as chaves / identidades SSH que você possui ao agente, mesmo que não seja necessário; como no caso de 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 precisa, conforme mostrado em ssh-add -l
seguida, limpe todas elas do agente da seguinte maneira:
ssh-add -D
Feito isso, inicie o agente SSH como um processo em segundo plano, assim:
eval "$(ssh-agent -s)"
Agora, fica estranho e não sei muito bem o porquê. Em alguns casos, você pode adicionar especificamente a ~/.ssh/id_rsa
chave / identidade ao agente da seguinte maneira:
ssh-add ~/.ssh/id_rsa
Digite sua senha, aperte Returne você deve estar pronto.
Mas em outros casos, basta executar isso para obter a chave / identidade adicionada:
ssh-add -K
Se tudo estiver funcionando, digite ssh-add -l
e você verá uma única chave / identidade SSH listada.
Tudo bom? Agora abra seu .bash_profile
:
nano ~/.bash_profile
E adicione esta linha na parte inferior; comente ou remova a -A
versão se você a tiver:
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 abertas do SSH e considera ssh-add -A
uma solução também.
A partir do macOS Sierra 10.12.2, a Apple adicionou uma UseKeychain
opção de configuração para configurações SSH. A verificação da página de 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''.
O que significa que a Apple vê a solução como uma adição ssh-add -A
à sua, .bash_profile
conforme explicado neste ticket de Radar Aberto ou UseKeychain
como uma das opções em uma por usuário ~/.ssh/config
.
$ ssh-add -K
me dássh-add: illegal option -- K