¿Cómo puedo deshabilitar la integración de la clave SSH en OS X Mavericks?

18

Tengo algunos problemas con SSH KeychainIntegration en OS X Mavericks. He intentado hurgarme en el sitio de soporte de Apple, pero no he visto a nadie que tenga mi problema. He visto a muchas personas que aparentemente no saben usar SSH tan bien, así que decidí probar con otra comunidad.

Primero, mi configuración está funcionando. Soy capaz de usar mi par de claves y ssh para los hosts que necesito, con mis credenciales almacenadas en caché en el agente. Puedo ver mis credenciales en caché a través de "ssh-add -l", como se esperaba. Se me pide que ingrese mi contraseña en un cuadro de diálogo del estilo de OS X, con una casilla de verificación que dice "Recordar contraseña en mi llavero". Generalmente ignoro esta casilla de verificación, pero cuando la verifico, veo mi clave almacenada en el llavero. Sin embargo, parece que esta clave almacenada en el llavero nunca se usa, ya que tengo una contraseña. Al menos eso es lo que he recogido de varias cosas que he leído. Cuando ingreso mi contraseña en el cuadro de diálogo, y la clave se almacena en caché en el agente, me conecto con éxito, pero no antes de que me digan "Error al guardar la contraseña en el llavero". Ver este mensaje de error es lo que me llevó a investigar más a fondo; No me gusta recibir un error cada vez que me conecto.

Las cosas se ponen interesantes al mirar la página del manual SSH_CONFIG (5 ) . Existen dos opciones para tratar con el llavero, específicas de Apple: AskPassGUI y KeychainIntegration. Eres capaz de alternar estos en ~ / .ssh / config, y al hacerlo se obtienen algunos resultados interesantes.

Al establecer AskPassGUI en no, ya no aparecerá un diálogo de estilo OS X, sino una línea de entrada de texto en su terminal. No biggie Pero si haces esto, ssh-agent no almacenará en caché tus credenciales. Esto está claramente roto y es frustrante porque podría vivir fácilmente con el mensaje de texto si las credenciales se almacenaran en caché.

Al establecer KeychainIntegration en no, ssh produce un error grave, de la siguiente manera:

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

Mi pregunta, simplemente, es la siguiente: ¿hay alguna manera de deshabilitar realmente la integración del llavero OS X para SSH?

    
pregunta Jim 20.02.2014 - 12:08

1 respuesta

7

Basado en el código fuente de la versión actual de SSH que se envía con Mavericks (ubicado en aquí ), parece que la funcionalidad de la opción de configuración KeychainIntegration aún no se ha implementado. Estoy haciendo esta suposición basada en el contenido de openssh / readconf.h , que no hace referencia a la opción KeychainIntegration . Sin embargo, sí hace referencia a la opción askpassgui . La comprobación de la estructura de "palabras clave" en ese archivo muestra que la opción keychainintegration no está presente (lo que a su vez implica que se devolverá el código de operación oBadOption (NULL)).

Otra pista que implica que la funcionalidad que desea no se implementa de la manera que especifica la página de manual es el archivo: openssh / keychain.c . El código fuente en realidad muestra que defaults El sistema (es decir, los archivos de la Lista de propiedades) se usa para almacenar configuraciones relacionadas con KeychainIntegration . Específicamente, las líneas de la función store_in_keychain hacen referencia a 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;
}

Aquí está la función get_boolean_preference correspondiente. Tenga en cuenta que está utilizando CFPreferencesCopyAppValue para obtener un booleano del identificador de la aplicación "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

Esto podría implicar que puedes deshabilitar la funcionalidad KeychainIntegration por ti mismo ejecutando este comando predeterminado:

defaults write org.openbsd.openssh KeychainIntegration -bool NO

o para configurarlo para todos los usuarios:

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

    
respondido por el Eddie Kelley 04.03.2014 - 20:24

Lea otras preguntas en las etiquetas