Ho avuto questo problema anche quando ho tentato di distribuire del codice usando Capistrano . Molto frustrante. Ecco due metodi che conosco per affrontare questo problema.
Metodo 1: aggiungi tutte le chiavi conosciute all'agente SSH.
Quindi, una soluzione che ho trovato è quella di eseguire ssh-add
con l'opzione -A
- che aggiunge tutte le identità conosciute all'agente SSH usando qualsiasi passphrase memorizzata nel tuo portachiavi -come questo:
ssh-add -A
Ora funziona, ma non continuerà con i riavvii. Quindi, se non vuoi più preoccuparti di questo, apri il file ~/.bash_profile
dell'utente in questo modo:
nano ~/.bash_profile
E aggiungi questa linea in basso:
ssh-add -A 2>/dev/null;
Ora quando apri una nuova finestra di Terminale, tutto dovrebbe andare bene!
Metodo 2: aggiungi solo le chiavi SSH che si trovano nel portachiavi all'agente.
Quindi, mentre l'opzione ssh-add -A
dovrebbe funzionare per la maggior parte dei casi di base, mi sono imbattuto in un problema di recente in cui avevo installato su una macchina 6-7 caselle di Vagrant (che usa chiavi SSH / identità per l'accesso) più comune id_rsa.pub
al posto.
Per farla breve, ho finito per essere bloccato da un server remoto a causa di troppi tentativi falliti basati su chiavi / identità SSH poiché l'accesso al server era basato su una password e le chiavi SSH / identità sono chiavi / identità SSH. Quindi l'agente SSH ha provato tutti delle mie chiavi SSH, non è riuscito e non sono riuscito a ottenere la richiesta della password.
Il problema è che ssh-add -A
aggiungerà arbitrariamente ogni singola chiave / identità SSH che hai all'agente anche se non è necessario farlo; come nel caso delle scatole di Vagrant.
La mia soluzione dopo molti test è stata la seguente.
Innanzitutto, se al tuo agente sono state aggiunte più chiavi SSH / identità di quante ne hai bisogno, come mostrato con ssh-add -l
, quindi elimina tutte dall'agente in questo modo:
ssh-add -D
Fatto ciò, quindi avviare l'agente SSH come processo in background in questo modo:
eval "$(ssh-agent -s)"
Ora, diventa strano e non sono sicuro del perché. In alcuni casi è possibile aggiungere in modo specifico la chiave / identità ~/.ssh/id_rsa
all'agente in questo modo:
ssh-add ~/.ssh/id_rsa
Inserisci la tua passphrase, premi Invio e dovresti andare.
Ma in altri casi è sufficiente eseguire questa operazione per ottenere l'aggiunta della chiave / identità:
ssh-add -K
Se tutto funziona, digita ssh-add -l
e dovresti vedere una sola chiave SSH / identità elencata.
Tutto bene? Ora apri .bash_profile
:
nano ~/.bash_profile
E aggiungi questa linea in fondo; commenta o rimuovi la versione -A
se disponi di tale posizione:
ssh-add -K 2>/dev/null;
Questo permetterà alla chiave SSH / identità di essere ricaricata all'agente SSH ad ogni avvio / riavvio.
AGGIORNAMENTO: Apple ha ora aggiunto un'opzione UseKeychain
alle opzioni di configurazione SSH aperte e considera anche ssh-add -A
una soluzione.
A partire da macOS Sierra 10.12.2, Apple ha aggiunto un'opzione di configurazione UseKeychain
per le configurazioni SSH. Il controllo della pagina man (tramite man ssh_config
) mostra le seguenti informazioni:
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''.
Che si riduce ad Apple che vede la soluzione aggiungendo ssh-add -A
al tuo .bash_profile
come spiegato in questo ticket Open Radar o aggiungendo UseKeychain
come una delle opzioni in per utente ~/.ssh/config
.