Ho avuto questo problema anche quando ho tentato di distribuire un codice usando Capistrano . Molto frustrante. Ecco due metodi che conosco per affrontare questo problema.
Metodo 1: aggiungere tutte le chiavi note all'agente SSH.
Quindi una soluzione che ho trovato è quella di eseguire ssh-addcon l' -Aopzione — che aggiunge tutte le identità conosciute all'agente SSH usando qualsiasi passphrase memorizzata nel tuo portachiavi — in questo modo:
ssh-add -A
Ora funziona ma non persiste per tutti i riavvi. Quindi, se non vuoi più preoccuparti di questo, apri il ~/.bash_profilefile del tuo utente in questo modo:
nano ~/.bash_profile
E aggiungi questa riga in fondo:
ssh-add -A 2>/dev/null;
Ora quando apri una nuova finestra Terminale, tutto dovrebbe andare bene!
Metodo 2: aggiungere solo le chiavi SSH presenti nel portachiavi all'agente.
Quindi, mentre l' ssh-add -Aopzione dovrebbe funzionare per la maggior parte dei casi di base, di recente ho riscontrato un problema in cui avevo installato 6-7 scatole Vagrant (che utilizzano chiavi / identità SSH per l'accesso) su una macchina in cima alle più comuni id_rsa.pubin atto.
Per farla breve, ho finito per essere bloccato fuori 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 / identità SSH sono chiavi / identità SSH. Quindi l'agente SSH ha provato tutte le mie chiavi SSH, non è riuscito e non sono nemmeno riuscito a visualizzare la richiesta della password.
Il problema è che ssh-add -Aaggiungerà arbitrariamente ogni singola chiave / identità SSH che hai all'agente anche se non è necessario farlo; come nel caso delle scatole Vagrant.
La mia soluzione dopo molti test è stata la seguente.
Innanzitutto, se hai più chiavi / identità SSH aggiunte al tuo agente di quante ne hai bisogno, come mostrato, ssh-add -lquindi eliminale tutte dall'agente in questo modo:
ssh-add -D
Fatto ciò, avvia l'agente SSH come un processo in background in questo modo:
eval "$(ssh-agent -s)"
Ora, diventa strano e non sono troppo sicuro del perché. In alcuni casi è possibile aggiungere in modo specifico la ~/.ssh/id_rsachiave / identità all'agente in questo modo:
ssh-add ~/.ssh/id_rsa
Digita la passphrase, premi Returne dovresti essere a posto.
Ma in altri casi semplicemente eseguirlo è sufficiente per ottenere la chiave / identità aggiunta:
ssh-add -K
Se tutto ha funzionato, digita ssh-add -le dovresti vedere una sola chiave / identità SSH elencata.
Tutto bene? Ora apri il tuo .bash_profile:
nano ~/.bash_profile
E aggiungi questa linea in fondo; commentare o rimuovere la -Aversione se è presente:
ssh-add -K 2>/dev/null;
Ciò consentirà di ricaricare la chiave / identità SSH nell'agente SSH ad ogni avvio / riavvio.
AGGIORNAMENTO: Apple ha ora aggiunto UseKeychainun'opzione alle opzioni di configurazione SSH aperte e considera anche ssh-add -Auna soluzione.
A partire da macOS Sierra 10.12.2, Apple ha aggiunto UseKeychainun'opzione di configurazione per le configurazioni SSH. Il controllo della pagina man (via 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''.
Il che si riduce ad Apple vedendo la soluzione come aggiunta ssh-add -Aal tuo .bash_profile come spiegato in questo ticket Open Radar o aggiunta UseKeychaincome una delle opzioni in un utente ~/.ssh/config.
$ ssh-add -Kmi dàssh-add: illegal option -- K