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-add
con l' -A
opzione — 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_profile
file 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 -A
opzione 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.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, non è riuscito e non sono nemmeno riuscito a visualizzare 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 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 -l
quindi 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_rsa
chiave / 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 -l
e 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 -A
versione 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 UseKeychain
un'opzione 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 UseKeychain
un'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 -A
al tuo .bash_profile
come spiegato in questo ticket Open Radar o aggiunta UseKeychain
come una delle opzioni in un utente ~/.ssh/config
.
$ ssh-add -K
mi dàssh-add: illegal option -- K