17 votes

Comment désactiver l'intégration du trousseau de clés SSH dans OS X Mavericks ?

J'ai quelques problèmes avec l'intégration du trousseau SSH dans OS X Mavericks. J'ai essayé de fouiller sur le site d'assistance d'Apple, mais je n'ai pas vu de personnes ayant le même problème que moi. I ont vu Beaucoup de gens qui ne savent apparemment pas très bien utiliser SSH, alors j'ai décidé d'essayer une autre communauté.

Tout d'abord, ma configuration fonctionne. Je suis capable d'utiliser ma paire de clés et de me connecter aux hôtes comme je le souhaite, mes informations d'identification étant mises en cache dans l'agent. Je suis capable de voir mes informations d'identification en cache via "ssh-add -l", comme prévu. Je suis invité à saisir mon mot de passe dans une boîte de dialogue de type OS X, avec une case à cocher indiquant "Mémoriser le mot de passe dans mon trousseau". J'ignore habituellement cette case à cocher, mais lorsque je la coche, je vois ma clé stockée dans le trousseau. Cette clé stockée dans le trousseau n'est apparemment jamais utilisée, puisque je dispose d'un mot de passe. C'est du moins ce que j'ai pu constater en lisant diverses informations. Lorsque je saisis mon mot de passe dans la boîte de dialogue et que la clé est mise en cache dans l'agent, je me connecte avec succès, mais pas avant d'avoir reçu le message "Saving password to keychain failed". C'est le fait de voir ce message d'erreur qui m'a poussé à chercher plus loin ; je n'aime pas recevoir une erreur à chaque fois que je me connecte.

Les choses deviennent intéressantes lorsqu'on regarde la page de manuel SSH_CONFIG(5) . Il existe deux options pour gérer le trousseau de clés, spécifiques à Apple : AskPassGUI, et KeychainIntegration. Vous pouvez les activer ou les désactiver dans ~/.ssh/config, ce qui donne des résultats intéressants.

Si vous définissez AskPassGUI sur non, vous ne serez plus invité par une boîte de dialogue de style OS X, mais par une ligne de texte dans votre terminal. Ce n'est pas un problème. Mais si vous faites cela, ssh-agent ne mettra pas en cache vos informations d'identification. C'est un problème évident, et c'est frustrant car je pourrais facilement vivre avec l'invite textuelle si les informations d'identification étaient mises en cache.

En fixant KeychainIntegration à no, ssh lance une erreur grave, comme suit :

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

Ma question, tout simplement, est la suivante : Existe-t-il un moyen de désactiver réellement l'intégration du trousseau d'OS X pour SSH ?

6voto

Jonathan Sampson Points 121800

En se basant sur le code source de la version actuelle de SSH fournie avec Mavericks (situé à ici ), il semble que la fonctionnalité de l'option de configuration KeychainIntegration n'a pas encore été mis en œuvre. Je fais cette supposition en me basant sur le contenu du document openssh/readconf.h qui ne fait pas référence à la KeychainIntegration option. Il fait toutefois référence à l'option askpassgui option. La vérification de la structure "keywords" dans ce fichier montre en effet que l'option keychainintegration n'est pas présente (ce qui implique que l'option oBadOption (NULL) op code serait retourné).

Un autre indice suggérant que la fonctionnalité que vous souhaitez n'est pas implémentée de la manière spécifiée dans la page de manuel est le fichier : openssh/keychain.c . Le code source montre en fait que le defaults (c'est-à-dire les fichiers de la liste des propriétés) est utilisé pour stocker les paramètres liés à l'utilisation de l'ordinateur. KeychainIntegration . Plus précisément, les lignes du store_in_keychain référence de la fonction 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;
}

Voici la correspondance get_boolean_preference fonction. Notez qu'elle utilise CFPreferencesCopyAppValue pour obtenir un booléen à partir de l'identifiant de l'application "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

Cela pourrait signifier que vous pouvez désactiver l'option KeychainIntegration pour vous-même en exécutant cette commande defaults :

defaults write org.openbsd.openssh KeychainIntegration -bool NO

ou pour le définir pour tous les utilisateurs :

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X