Come posso disabilitare l'integrazione del portachiavi SSH in OS X Mavericks?


18

Sto riscontrando alcuni problemi con l'integrazione del portachiavi SSH in OS X Mavericks. Ho provato a cercare il sito di supporto di Apple, ma non ho visto nessuno avere il mio problema. Ho visto molte persone che apparentemente non sanno usare bene SSH, quindi ho deciso di provare un'altra community.

Innanzitutto, la mia configurazione funziona. Sono in grado di utilizzare la mia coppia di chiavi e ssh per gli host di cui ho bisogno, con le mie credenziali memorizzate nella cache nell'agente. Sono in grado di vedere le mie credenziali memorizzate nella cache tramite "ssh-add -l", come previsto. Mi viene richiesto di inserire la mia password da una finestra di dialogo in stile OS X, con una casella che dice "Ricorda la password nel mio portachiavi". Di solito ignoro questa casella di controllo, ma quando la seleziono, vedo la mia chiave memorizzata nel portachiavi. Questa chiave memorizzata nel portachiavi non sembra essere mai utilizzata, tuttavia, poiché ho una password. Almeno questo è quello che ho raccolto da varie cose che ho letto. Quando inserisco la mia password nella finestra di dialogo e la chiave viene memorizzata nella cache nell'agente, mi collego correttamente, ma non prima che mi venisse detto "Il salvataggio della password nel portachiavi non è riuscito". Vedere questo messaggio di errore è ciò che mi ha portato a indagare ulteriormente; Non mi piace ricevere un errore ogni volta che mi connetto.

Le cose si fanno interessanti guardando la manpage SSH_CONFIG (5) . Esistono due opzioni per gestire il portachiavi, specifiche per Apple: AskPassGUI e KeychainIntegration. Puoi abilitarli in ~ / .ssh / config, e così facendo si ottengono alcuni risultati interessanti.

Impostando AskPassGUI su no, non ti verrà più richiesto un dialogo in stile OS X, ma una riga di testo di input nel tuo terminale. Nessun problema. Ma se lo fai, allora ssh-agent non memorizzerà nella cache le tue credenziali. Questo è chiaramente rotto e frustrante perché potrei facilmente convivere con il messaggio di testo se le credenziali fossero memorizzate nella cache.

Impostando KeychainIntegration su no, ssh genera un errore grave, come segue:

~/.ssh/config: line 11: Bad configuration option: KeychainIntegration
~/.ssh/config: terminating, 1 bad configuration options

La mia domanda, semplicemente, è questa: esiste un modo per disabilitare effettivamente l'integrazione del portachiavi OS X per SSH?


Bella domanda, non ho una risposta immediata, ma spero con i voti che ha, apparirà sul radar di qualcuno. Posso confermare il bug sulla mia build di OS X con un solo file di configurazione di una riga - l'impostazione del valore su yes o no fallisce come descritto.
bmike

Un punto di chiarimento: ricevo il messaggio "Salvataggio password nel portachiavi non riuscito" quando ssh-add memorizza correttamente le credenziali. Io non lo vedo su ogni tentativo di connessione, che è come si legge, quando ho ri-letto. Con le credenziali memorizzate nella cache, si collega semplicemente in modo silenzioso, come ci si aspetterebbe.
Jim,

Risposte:


7

Sulla base del codice sorgente per la versione corrente di SSH fornita con Mavericks (che si trova qui ), sembra che la funzionalità dell'opzione di configurazione KeychainIntegrationnon sia stata ancora implementata. Sto assumendo questo presupposto in base al contenuto di openssh / readconf.h , che non fa riferimento KeychainIntegrationall'opzione. Fa tuttavia riferimento askpassguiall'opzione. Il controllo della struttura delle "parole chiave" in quel file mostra effettivamente che l' keychainintegrationopzione non è presente (il che a sua volta implica che il oBadOptioncodice operativo (NULL) venga restituito).

Un altro indizio che implica che la funzionalità desiderata non è implementata nel modo specificato dalla pagina man è il file: openssh / keychain.c . Il codice sorgente in realtà mostra che il defaultssistema (ad esempio, i file dell'elenco delle proprietà) viene utilizzato per memorizzare le impostazioni correlate KeychainIntegration. In particolare, le righe dalla store_in_keychainfunzione di riferimento 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;
}

Ecco la get_boolean_preferencefunzione corrispondente . Si noti che sta utilizzando CFPreferencesCopyAppValueper ottenere un valore booleano dall'identificatore dell'applicazione "org.openbsd.openssh":

#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

Ciò potrebbe implicare che puoi disabilitare la KeychainIntegrationfunzionalità per te stesso eseguendo questo comando di default:

defaults write org.openbsd.openssh KeychainIntegration -bool NO

o per impostarlo per tutti gli utenti:

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


2
Hai scavato in profondità e lo apprezzo. Ho provato a installare KeychainIntegrationa NOvia defaultscome lei ha suggerito. sshpoi si comporta come se avessi messo AskPassGUIin ~/.ssh/config- senza credenziali vengono memorizzate nella cache, e sono richiamato per la passphrase per tutto il tempo. Meno utile. Tuttavia, penso che tu abbia risposto alla domanda e la risposta è semplicemente "Può essere disabilitata, ma non è completamente implementata e probabilmente non ti piaceranno i risultati".
Jim

Grazie mille stavo cercando dappertutto per trovare una risposta a questo. Dato che ho un file .zshrc personalizzato che porto tra Mac e Linux, mi stava facendo impazzire quel portachiavi stava prendendo il controllo della gestione di ssh-agent e delle chiavi aggiunte.
LF4,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.