Ich hatte dieses Problem auch, als ich versucht habe, einen Code mit Capistrano zu verteilen. Sehr frustrierend. Hier sind zwei Methoden, die ich kenne, um mit diesem Problem umzugehen.
Methode 1: Fügen Sie alle bekannten Schlüssel zum SSH-Agenten hinzu.
Eine Lösung, die ich gefunden habe, ist die Ausführung von ssh-add
mit der Option -A
, die alle bekannten Identitäten zum SSH-Agenten hinzufügt, wobei alle in Ihrem Schlüsselbund gespeicherten Passphrasen verwendet werden - etwa so:
ssh-add -A
Das funktioniert zwar, bleibt aber nicht über Neustarts hinweg erhalten. Wenn Sie sich also nie wieder Gedanken darüber machen wollen, öffnen Sie einfach die ~/.bash_profile
-Datei Ihres Benutzers wie folgt:
nano ~/.bash_profile
Und fügen Sie diese Zeile am Ende ein:
ssh-add -A 2>/dev/null;
Wenn Sie jetzt ein neues Terminalfenster öffnen, sollte alles gut sein!
Methode 2: Fügen Sie dem Agenten nur SSH-Schlüssel hinzu, die sich im Schlüsselbund befinden.
Während die Option ssh-add -A
für die meisten grundlegenden Fälle funktionieren sollte, stieß ich kürzlich auf ein Problem, bei dem ich 6-7 Vagrant-Boxen (die SSH-Schlüssel/-Identitäten für den Zugriff verwenden) auf einem Rechner eingerichtet hatte.
Lange Rede, kurzer Sinn: Ich wurde von einem entfernten Server ausgesperrt, weil zu viele Fehlversuche auf der Basis von SSH-Schlüsseln/-Identitäten auftraten, da der Serverzugriff auf einem Passwort basierte und SSH-Schlüssel/-Identitäten SSH-Schlüssel/-Identitäten sind. Der SSH-Agent probierte also alle meiner SSH-Schlüssel aus, schlug fehl und ich konnte nicht einmal zur Passwortabfrage gelangen.
Das Problem ist, dass id_rsa.pub
einfach willkürlich jeden einzelnen SSH-Schlüssel/jede einzelne SSH-Identität, die Sie haben, zum Agenten hinzufügt, auch wenn es nicht notwendig ist; wie im Fall von Vagrant-Boxen.
Meine Lösung nach vielen Tests war wie folgt.
Wenn Sie zunächst mehr SSH-Schlüssel/-Identitäten zu Ihrem Agenten hinzugefügt haben, als Sie benötigen - wie mit ssh-add -A
gezeigt - dann löschen Sie sie alle aus dem Agenten wie folgt:
ssh-add -D
Danach starten Sie den SSH-Agenten als Hintergrundprozess wie folgt:
eval "$(ssh-agent -s)"
Jetzt wird es seltsam und ich bin mir nicht ganz sicher, warum. In einigen Fällen können Sie den Schlüssel/die Identität ssh-add -l
gezielt zum Agenten hinzufügen, etwa so:
ssh-add ~/.ssh/id_rsa.pub
Geben Sie Ihre Passphrase ein, drücken Sie die Eingabetaste, und Sie sollten startklar sein.
In anderen Fällen reicht es aus, dies auszuführen, um den Schlüssel/die Identität hinzuzufügen:
ssh-add -K
Wenn das alles funktioniert hat, geben Sie ~/.ssh/id_rsa.pub
ein und Sie sollten einen einsamen SSH-Schlüssel/eine einsame SSH-Identität aufgelistet sehen.
Alles gut? Öffnen Sie nun Ihr ssh-add -l
:
nano ~/.bash_profile
Und fügen Sie diese Zeile am Ende ein; kommentieren Sie die .bash_profile
-Version aus oder entfernen Sie sie, falls Sie sie bereits haben:
ssh-add -K 2>/dev/null;
Damit wird der SSH-Schlüssel/die SSH-Identität bei jedem Start/Reboot neu in den SSH-Agenten geladen.
UPDATE: Apple hat nun eine -A
-Option zu den offenen SSH-Konfigurationsoptionen hinzugefügt und hält UseKeychain
ebenfalls für eine Lösung.
Ab macOS Sierra 10.12.2 hat Apple (so nehme ich an) eine ssh-add -A
-Konfigurationsoption für SSH-Konfigurationen hinzugefügt. Ein Blick in die Manpage (über UseKeychain
) zeigt die folgenden Informationen:
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''.
Was darauf hinausläuft, dass Apple die Lösung darin sieht, entweder man ssh_config
zu Ihrem ssh-add -A
hinzuzufügen wie in diesem Open Radar-Ticket erklärt oder .bash_profile
als eine der Optionen in einem UseKeychain
pro Benutzer hinzuzufügen.