Ho avuto anch'io questo problema quando ho cercato di distribuire del 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-add
con l'opzione -A
- che aggiunge tutte le identità conosciute all'agente SSH usando qualsiasi frase chiave memorizzata nel tuo portachiavi, come questa:
ssh-add -A
Ora questo funziona ma non persisterà attraverso i riavvii. Quindi, se non volete più preoccuparvi di questo, aprite semplicemente il file ~/.bash_profile
del vostro utente in questo modo:
nano ~/.bash_profile
E aggiungi questa linea in fondo:
ssh-add -A 2>/dev/null;
Ora quando aprite una nuova finestra del Terminale, tutto dovrebbe essere a posto!
Metodo 2: Aggiungere solo le chiavi SSH che sono nel portachiavi all'agente.
Quindi, mentre l'opzione ssh-add -A
dovrebbe funzionare per la maggior parte dei casi di base, mi sono imbattuto recentemente in un problema in cui avevo 6-7 box Vagrant (che usa chiavi/identità SSH per l'accesso) configurati su una macchina sopra la più comune id_rsa.pub
in 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, ha fallito e non ho potuto nemmeno arrivare al prompt 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 dei box Vagrant.
La mia soluzione dopo molte prove è stata la seguente.
Per prima cosa, se avete più chiavi/identità SSH aggiunte al vostro agente di quante ve ne servano - come mostrato con ssh-add -l
allora eliminatele tutte dall'agente in questo modo:
ssh-add -D
Fatto questo, avvia l'agente SSH come 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 specificamente la chiave/identità ~/.ssh/id_rsa.pub
all'agente in questo modo:
ssh-add ~/.ssh/id_rsa.pub
Digita la tua passphrase, premi Return e dovresti essere pronto a partire.
Ma in altri casi è sufficiente eseguire questo per ottenere la chiave/identità aggiunta:
ssh-add -K
Se tutto questo ha funzionato, digita ssh-add -l
e dovresti vedere una sola chiave/identità SSH elencata.
Tutto bene? Ora aprite il vostro .bash_profile
:
nano ~/.bash_profile
E aggiungi questa linea in fondo; commenta o rimuovi la versione -A
se ce l'hai già:
ssh-add -K 2>/dev/null;
Questo permetterà alla chiave/identità SSH di essere ricaricata nell'agente SSH ad ogni avvio/riavvio.
UPDATE: 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 (presumo) ha aggiunto un'opzione di configurazione UseKeychain
per le configurazioni SSH. Controllando la pagina man (tramite man ssh_config
) si trovano 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 significa che Apple vede la soluzione come aggiungere ssh-add -A
al tuo .bash_profile
come spiegato in questo ticket di Open Radar o aggiungere UseKeychain
come una delle opzioni in un ~/.ssh/config
per utente.