Ik had dit probleem ook toen ik wat code probeerde te implementeren met Capistrano . Zeer frustrerend. Hier zijn twee methodes die ik ken om met dit probleem om te gaan.
Methode 1: Voeg alle bekende sleutels toe aan de SSH agent.
Dus een oplossing die ik gevonden heb is om ssh-add
met de -A
optie uit te voeren - die voegt alle bekende identiteiten aan de SSH agent toe met alle passphrases die in je sleutelbos zijn opgeslagen - zoals dit:
ssh-add -A
Dit werkt, maar het blijft niet behouden na een herstart. Dus als je je hier nooit meer zorgen over wilt maken, open dan gewoon het ~/.bash_profile
bestand van je gebruiker zoals dit:
nano ~/.bash_profile
En voeg deze regel toe aan de onderkant:
ssh-add -A 2>/dev/null;
Als je nu een nieuw Terminal venster opent, zou alles goed moeten zijn!
Methode 2: Voeg alleen SSH sleutels toe die in de keychain zitten aan de agent.
Dus hoewel de ssh-add -A
optie zou moeten werken voor de meeste basisgevallen, kwam ik onlangs een probleem tegen waarbij ik 6-7 Vagrant boxes (die SSH sleutels/identiteiten gebruiken voor toegang) op een machine had ingesteld bovenop de meer gebruikelijke id_rsa.pub
op zijn plaats.
Lang verhaal kort, ik werd uiteindelijk buitengesloten van een server op afstand door te veel mislukte pogingen gebaseerd op SSH sleutels/identiteiten aangezien de toegang tot de server gebaseerd was op een wachtwoord en SSH sleutels/identiteiten SSH sleutels/identiteiten zijn. Dus de SSH agent probeerde alle van mijn SSH sleutels, mislukte en ik kon niet eens bij de wachtwoord prompt komen.
Het probleem is dat ssh-add -A
gewoon willekeurig elke SSH sleutel/identiteit die je hebt aan de agent toevoegt, zelfs als het niet nodig is om dat te doen; zoals in het geval van Vagrant boxes.
Mijn oplossing na veel testen was als volgt.
Ten eerste, als je meer SSH keys/identiteiten aan je agent hebt toegevoegd dan je nodig hebt-zoals getoond met ssh-add -l
dan verwijder je ze allemaal van de agent zoals dit:
ssh-add -D
Als dat gedaan is, start dan de SSH agent als een achtergrond proces zoals dit:
eval "$(ssh-agent -s)"
Nu wordt het vreemd en ik ben er niet zeker van waarom. In sommige gevallen kun je specifiek de ~/.ssh/id_rsa.pub
sleutel/identiteit aan de agent toevoegen, zoals dit:
ssh-add ~/.ssh/id_rsa.pub
Typ je passphrase in, druk op Return en je zou goed moeten zijn om te gaan.
Maar in andere gevallen is alleen dit al genoeg om de sleutel/identiteit toegevoegd te krijgen:
ssh-add -K
Als dat allemaal gewerkt heeft, typ dan ssh-add -l
in en je zou één SSH sleutel/identiteit in de lijst moeten zien staan.
Alles goed? Open nu je .bash_profile
:
nano ~/.bash_profile
En voeg deze regel toe aan de onderkant; commentaar of verwijder de -A
versie als je die al hebt:
ssh-add -K 2>/dev/null;
Dat zal ervoor zorgen dat de SSH sleutel/identiteit opnieuw geladen wordt in de SSH agent bij elke opstart/reboot.
UPDATE: Apple heeft nu een UseKeychain
optie toegevoegd aan de open SSH config opties en beschouwt ssh-add -A
ook als een oplossing.
Vanaf macOS Sierra 10.12.2, heeft Apple (naar ik aanneem) een UseKeychain
config optie toegevoegd voor SSH configs. Het raadplegen van de man page (via man ssh_config
) laat de volgende info zien:
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''.
Wat erop neerkomt dat Apple de oplossing ziet als ofwel het toevoegen van ssh-add -A
aan je .bash_profile
zoals uitgelegd in dit Open Radar ticket of het toevoegen van UseKeychain
als een van de opties in een per gebruiker ~/.ssh/config
.