Wie kann ich die SSH-Schlüsselbundintegration in OS X Mavericks deaktivieren?

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?

Gute Frage, ich habe keine sofortige Antwort, aber ich hoffe, dass sie mit den Stimmen, die sie hat, auf dem Radar von jemandem auftauchen wird. Ich kann den Fehler in meinem Build von OS X mit nur einer einzeiligen Konfigurationsdatei bestätigen - das Festlegen des Werts auf Ja oder Nein schlägt wie beschrieben fehl.
Ein Punkt zur Klarstellung: Ich erhalte nur die Meldung "Saving password to keychain failed", wenn ssh-add erfolgreich Anmeldeinformationen zwischenspeichert. Ich sehe es nicht bei jedem Verbindungsversuch, so liest es sich, wenn ich es erneut lese. Mit zwischengespeicherten Anmeldeinformationen wird die Verbindung einfach leise hergestellt, wie Sie es erwarten würden.

Antworten (1)

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 KeychainIntegrationnoch nicht implementiert wurde. Ich mache diese Annahme basierend auf dem Inhalt von openssh/readconf.h , der nicht auf die KeychainIntegrationOption verweist. Es verweist jedoch auf die askpassguiOption. Die Überprüfung der "Schlüsselwörter"-Struktur in dieser Datei zeigt tatsächlich, dass die keychainintegrationOption 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 defaultsSystem (dh Property List-Dateien) verwendet wird, um Einstellungen zu speichern, die sich auf KeychainIntegration. Insbesondere Zeilen aus der store_in_keychainFunktionsreferenz 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_preferenceFunktion. 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 KeychainIntegrationFunktionalitä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

Du hast tief gegraben, und ich schätze es. KeychainIntegrationIch habe versucht , NOper Einstellung defaultswie von Ihnen vorgeschlagen. sshverhält sich dann so, als ob ich einsteigen würde AskPassGUI~/.ssh/configes 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."
Vielen Dank, ich habe überall gesucht, um eine Antwort darauf zu finden. Da ich eine benutzerdefinierte .zshrc-Datei habe, die ich zwischen Mac und Linux portiere, machte es mich verrückt, dass keychain die Kontrolle über die Verwaltung von ssh-agent und den hinzugefügten Schlüsseln übernahm.