Tengo algunos problemas con SSH KeychainIntegration en OS X Mavericks. He intentado hurgar 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 cómo usar SSH tan bien, así que decidí probar con otra comunidad.
Primero, mi configuración está funcionando. Puedo usar mi par de claves y ssh para hosts según sea necesario, 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 solicita que ingrese mi contraseña mediante un cuadro de diálogo estilo OS X, con una casilla de verificación que dice "Recordar contraseña en mi llavero". Por lo general, ignoro esta casilla de verificación, pero cuando la marco, veo mi clave almacenada en el llavero. Sin embargo, esta clave almacenada en el llavero aparentemente nunca se usa, ya que tengo una contraseña. Al menos eso es lo que he deducido 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 de manual SSH_CONFIG(5) . Existen dos opciones para manejar el llavero, específicas de Apple: AskPassGUI y KeychainIntegration. Puede alternar estos en ~/.ssh/config, y hacerlo produce algunos resultados interesantes.
Si configura AskPassGUI en no, ya no se le solicitará un cuadro de diálogo al estilo de OS X, sino una línea de texto de entrada en su terminal. No hay problema. Pero si hace esto, entonces ssh-agent no almacenará en caché sus 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 configurar KeychainIntegration en no, ssh arroja 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 forma de deshabilitar la integración de llavero OS X para SSH?
Según el código fuente de la versión actual de SSH que se envía con Mavericks (ubicado aquí ), parece que la funcionalidad de la opción de configuración KeychainIntegration
aún no se ha implementado. Hago esta suposición en función del contenido de openssh/readconf.h , que no hace referencia a la KeychainIntegration
opción. Sin embargo, hace referencia a la askpassgui
opción. La verificación de la estructura de "palabras clave" en ese archivo muestra que la keychainintegration
opción no está presente (lo que a su vez implica que oBadOption
se devolvería el código de operación (NULL)).
Otra pista que implica que la funcionalidad que desea no está implementada de la manera que especifica la página del manual es el archivo: openssh/keychain.c . El código fuente en realidad muestra que el defaults
sistema (es decir, los archivos de Lista de propiedades) se está utilizando para almacenar configuraciones relacionadas con KeychainIntegration
. Específicamente, las líneas de la store_in_keychain
función 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 get_boolean_preference
función correspondiente. Tenga en cuenta que se utiliza CFPreferencesCopyAppValue
para obtener un valor booleano del identificador de 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 puede deshabilitar la KeychainIntegration
funcionalidad usted 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
KeychainIntegration
a NO
través defaults
como sugeriste. ssh
luego se comporta como si lo hubiera configurado : no se almacenan credenciales AskPassGUI
en ~/.ssh/config
caché y se me solicita la frase de contraseña todo el tiempo. Menos que útil. Aún así, creo que ha respondido a la pregunta, y la respuesta es, simplemente, "Se puede desactivar, pero no está completamente implementado, y probablemente no le gusten los resultados".
bmike
Jim