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

18

Ich habe einige Probleme mit SSH KeychainIntegration in OS X Mavericks. Ich habe versucht, mich auf der Support-Website von Apple umzuschauen, habe aber noch niemanden mit meinem Problem gesehen. Ich habe viele Leute gesehen, die anscheinend nicht so gut mit SSH umgehen können, also habe ich beschlossen, es mit einer anderen Community zu versuchen.

Erstens funktioniert meine Konfiguration. Ich kann mein Schlüsselpaar und ssh nach Bedarf für Hosts verwenden, wobei meine Anmeldeinformationen im Agenten zwischengespeichert werden. Ich kann meine zwischengespeicherten Anmeldeinformationen wie erwartet über "ssh-add -l" anzeigen. Ich werde in einem Dialogfeld im OS X-Stil aufgefordert, mein Kennwort einzugeben. Das Kontrollkästchen lautet "Kennwort in meinem Schlüsselbund speichern". Normalerweise ignoriere ich dieses Kontrollkästchen, aber wenn ich es ankreuze, wird mein Schlüssel im Schlüsselbund gespeichert. Dieser im Schlüsselbund gespeicherte Schlüssel wird jedoch anscheinend nie verwendet, da ich ein Kennwort darauf habe. Zumindest habe ich das aus verschiedenen Dingen gelernt, die ich gelesen habe. Wenn ich mein Kennwort in das Dialogfeld eingebe und der Schlüssel im Agenten zwischengespeichert ist, wird die Verbindung erfolgreich hergestellt, jedoch nicht, bevor die Meldung "Speichern des Kennworts im Schlüsselbund fehlgeschlagen" angezeigt wird. Diese Fehlermeldung hat mich veranlasst, weitere Nachforschungen anzustellen. Ich bekomme nicht gerne jedes Mal eine Fehlermeldung, wenn ich eine Verbindung herstelle.

Interessant wird es beim Betrachten der Manpage SSH_CONFIG (5) . Für den Umgang mit dem Schlüsselbund gibt es zwei Apple-spezifische Optionen: AskPassGUI und KeychainIntegration. Sie können diese in ~ / .ssh / config umschalten und so einige interessante Ergebnisse erzielen.

Wenn Sie AskPassGUI auf no setzen, wird nicht mehr ein Dialogfeld im OS X-Stil angezeigt, sondern eine Eingabetextzeile in Ihrem Terminal. Kein Problem. Wenn Sie dies jedoch tun, speichert ssh-agent Ihre Anmeldeinformationen nicht im Cache. Dies ist offensichtlich fehlerhaft und frustrierend, da ich leicht mit der Eingabeaufforderung leben könnte, wenn die Anmeldeinformationen zwischengespeichert würden.

Wenn Sie KeychainIntegration auf no setzen, gibt ssh einen schweren Fehler 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?

Jim
quelle
Gute Frage, ich habe keine sofortige Antwort, aber ich hoffe, dass sie bei den abgegebenen Stimmen auf dem Radar eines anderen auftaucht. Ich kann den Fehler in meinem Build von OS X mit nur einer einzeiligen Konfigurationsdatei bestätigen - das Festlegen des Werts auf yes oder no schlägt fehl, wie beschrieben.
bmike
Ein klarer Punkt: Ich erhalte nur die Meldung "Speichern des Kennworts im Schlüsselbund fehlgeschlagen", wenn ssh-add die Anmeldeinformationen erfolgreich zwischenspeichert. Ich nicht sehen es auf jeden Verbindungsversuch, der ist , wie es liest, wenn ich es wieder lesen. Bei zwischengespeicherten Anmeldeinformationen wird die Verbindung wie erwartet einfach hergestellt.
Jim

Antworten:

7

Basierend auf dem Quellcode für die aktuelle Version von SSH, die mit Mavericks ausgeliefert wird ( hier zu finden ), scheint die Funktionalität der Konfigurationsoption KeychainIntegrationnoch nicht implementiert worden zu sein. Ich gehe davon aus, dass der Inhalt von openssh / readconf.h die KeychainIntegrationOption nicht referenziert . Es wird jedoch auf die askpassguiOption verwiesen . Das Überprüfen der Struktur "keywords" in dieser Datei zeigt in der Tat, dass die keychainintegrationOption nicht vorhanden ist (was wiederum impliziert, dass der oBadOption(NULL) -Op-Code zurückgegeben würde).

Ein weiterer Hinweis darauf, dass die von Ihnen gewünschte Funktionalität nicht wie in der Manpage angegeben implementiert ist, ist die Datei openssh / keychain.c . Der Quellcode zeigt tatsächlich, dass das defaultsSystem (dh Eigenschaftslistendateien) zum Speichern von Einstellungen verwendet wird, die sich auf beziehen 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 aus der Anwendungs-ID "org.openbsd.openssh" abzurufen:

#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 selbst deaktivieren können, indem Sie den folgenden Standardbefehl ausführen:

defaults write org.openbsd.openssh KeychainIntegration -bool NO

oder für alle Benutzer einstellen:

sudo defaults write /Library/Preferences/org.openbsd.openssh KeychainIntegration -bool NO

Eddie Kelley
quelle
2
Sie haben tief gegraben, und ich weiß das zu schätzen. Ich habe versucht KeychainIntegration, NOvia einzustellen , defaultswie Sie vorgeschlagen haben. sshdann verhält sich , als ob ich würde eingestellt AskPassGUIin ~/.ssh/config- keine Anmeldeinformationen zwischengespeichert werden, und ich bin für das Passwort die ganze Zeit gefragt werden . Weniger als nützlich. Trotzdem denke ich, dass Sie die Frage beantwortet haben und die Antwort einfach lautet: "Sie kann deaktiviert werden, ist aber nicht vollständig implementiert und die Ergebnisse werden Ihnen wahrscheinlich nicht gefallen."
Jim
Vielen Dank, ich habe überall nach einer Antwort gesucht. Da ich eine benutzerdefinierte .zshrc-Datei habe, die ich zwischen Mac und Linux portiere, hat es mich verrückt gemacht, dass der Schlüsselbund die Kontrolle über die Verwaltung von ssh-agent und den hinzugefügten Schlüsseln übernahm.
LF4