Ich habe einige Probleme mit der SSH-Schlüsselbundintegration in OS X Mavericks. Ich habe versucht, mich auf der Support-Website von Apple umzusehen, aber niemanden mit meinem Problem gesehen. Ich habe viele Leute gesehen, die anscheinend nicht so gut mit SSH umgehen können, also habe ich mich entschieden, es mit einer anderen Community zu versuchen.
Erstens, meine Konfiguration funktioniert. Ich kann mein Schlüsselpaar und ssh zu Hosts nach Bedarf verwenden, wobei meine Anmeldeinformationen im Agenten zwischengespeichert werden. Ich kann meine zwischengespeicherten Anmeldeinformationen wie erwartet über "ssh-add -l" anzeigen. Ich werde von einem OS X-ähnlichen Dialogfeld aufgefordert, mein Passwort einzugeben, mit einem Kontrollkästchen, das besagt: „Passwort in meinem Schlüsselbund speichern“. Normalerweise ignoriere ich dieses Kontrollkästchen, aber wenn ich es aktiviere, sehe ich meinen Schlüssel im Schlüsselbund gespeichert. Dieser im Schlüsselbund gespeicherte Schlüssel wird jedoch anscheinend nie verwendet, da ich ein Passwort darauf habe. Zumindest habe ich das aus diversen Sachen, die ich gelesen habe, mitbekommen. Wenn ich mein Passwort in das Dialogfeld eingebe und der Schlüssel im Agenten zwischengespeichert ist, verbinde ich mich erfolgreich, aber nicht bevor die Meldung "Speichern des Passworts im Schlüsselbund fehlgeschlagen" angezeigt wird. Diese Fehlermeldung zu sehen, hat mich dazu veranlasst, weitere Nachforschungen anzustellen. Ich mag es nicht, jedes Mal eine Fehlermeldung zu erhalten, wenn ich eine Verbindung herstelle.
Interessant wird es, wenn man sich die Manpage SSH_CONFIG(5) ansieht . Es gibt zwei Apple-spezifische Optionen für den Umgang mit dem Schlüsselbund: AskPassGUI und KeychainIntegration. Sie können diese in ~/.ssh/config umschalten, was zu einigen interessanten Ergebnissen führt.
Wenn Sie AskPassGUI auf no setzen, werden Sie nicht mehr mit einem Dialog im OS X-Stil aufgefordert, sondern mit einer Eingabetextzeile in Ihrem Terminal. Kein Problem. Aber wenn Sie dies tun, wird ssh-agent Ihre Anmeldeinformationen nicht zwischenspeichern. Das ist einfach kaputt und frustrierend, weil ich leicht mit der Texteingabe leben könnte, wenn die Anmeldeinformationen zwischengespeichert würden.
Wenn Sie KeychainIntegration auf no setzen, gibt ssh einen schwerwiegenden Fehler wie folgt aus:
~/.ssh/config: line 11: Bad configuration option: KeychainIntegration
~/.ssh/config: terminating, 1 bad configuration options
Meine Frage lautet einfach: Gibt es eine Möglichkeit, die OS X-Schlüsselbundintegration für SSH tatsächlich zu deaktivieren?
Basierend auf dem Quellcode für die aktuelle Version von SSH, die mit Mavericks ausgeliefert wird ( hier zu finden ), scheint es, dass die Funktionalität der Konfigurationsoption KeychainIntegration
noch nicht implementiert wurde. Ich mache diese Annahme basierend auf dem Inhalt von openssh/readconf.h , der nicht auf die KeychainIntegration
Option verweist. Es verweist jedoch auf die askpassgui
Option. Die Überprüfung der "Schlüsselwörter"-Struktur in dieser Datei zeigt tatsächlich, dass die keychainintegration
Option nicht vorhanden ist (was wiederum impliziert, dass der oBadOption
(NULL)-Operationscode zurückgegeben würde).
Ein weiterer Hinweis darauf, dass die gewünschte Funktionalität nicht so implementiert ist, wie es die Manpage angibt, ist die Datei: openssh/keychain.c . Der Quellcode zeigt tatsächlich, dass das defaults
System (dh Property List-Dateien) verwendet wird, um Einstellungen zu speichern, die sich auf KeychainIntegration
. Insbesondere Zeilen aus der store_in_keychain
Funktionsreferenz KeychainIntegration:
/* Bail out if KeychainIntegration preference is -bool NO */
if (get_boolean_preference("KeychainIntegration", 1, 1) == 0) {
fprintf(stderr, "Keychain integration is disabled.\n");
goto err;
}
Hier ist die entsprechende get_boolean_preference
Funktion. Beachten Sie, dass es verwendet wird CFPreferencesCopyAppValue
, um einen booleschen Wert von der Anwendungskennung "org.openbsd.openssh" zu erhalten:
#if defined(__APPLE_KEYCHAIN__)
static int get_boolean_preference(const char *key, int default_value,
int foreground)
{
int value = default_value;
CFStringRef keyRef = NULL;
CFPropertyListRef valueRef = NULL;
keyRef = CFStringCreateWithCString(NULL, key, kCFStringEncodingUTF8);
if (keyRef != NULL)
valueRef = CFPreferencesCopyAppValue(keyRef,
CFSTR("org.openbsd.openssh"));
if (valueRef != NULL)
if (CFGetTypeID(valueRef) == CFBooleanGetTypeID())
value = CFBooleanGetValue(valueRef);
else if (foreground)
fprintf(stderr, "Ignoring nonboolean %s preference.\n", key);
if (keyRef)
CFRelease(keyRef);
if (valueRef)
CFRelease(valueRef);
return value;
}
#endif
Dies könnte bedeuten, dass Sie die KeychainIntegration
Funktionalität für sich selbst deaktivieren können, indem Sie diesen Standardbefehl ausführen:
defaults write org.openbsd.openssh KeychainIntegration -bool NO
oder um es für alle Benutzer einzustellen:
sudo defaults write /Library/Preferences/org.openbsd.openssh KeychainIntegration -bool NO
KeychainIntegration
Ich habe versucht , NO
per Einstellung defaults
wie von Ihnen vorgeschlagen. ssh
verhält sich dann so, als ob ich einsteigen würde AskPassGUI
– ~/.ssh/config
es werden keine Anmeldeinformationen zwischengespeichert, und ich werde ständig zur Eingabe der Passphrase aufgefordert. Weniger als nützlich. Trotzdem denke ich, dass Sie die Frage beantwortet haben, und die Antwort lautet einfach: "Es kann deaktiviert werden, ist aber nicht vollständig implementiert, und Ihnen werden die Ergebnisse wahrscheinlich nicht gefallen."
Fahrrad
Jim