Como posso desativar o SSH KeychainIntegration no OS X Mavericks?

18

Estou tendo alguns problemas com a SSH KeychainIntegration no OS X Mavericks. Tentei bisbilhotar o site de suporte da Apple, mas não vi ninguém com meu problema. Já vi muitas pessoas que aparentemente não sabem usar o SSH tão bem, então decidi tentar outra comunidade.

Primeiro, minha configuração está funcionando. Posso usar meu par de chaves e ssh nos hosts conforme necessário, com minhas credenciais sendo armazenadas em cache no agente. Consigo ver minhas credenciais em cache via "ssh-add -l", conforme o esperado. Sou solicitado a inserir minha senha em uma caixa de diálogo no estilo OS X, com uma caixa de seleção que diz "Lembrar senha no meu chaveiro". Normalmente, eu ignoro essa caixa de seleção, mas quando a marca, vejo minha chave armazenada no chaveiro. No entanto, essa chave armazenada no chaveiro aparentemente nunca é usada, pois eu tenho uma senha. Pelo menos é o que eu recolhi de várias coisas que li. Quando digito minha senha na caixa de diálogo e a chave é armazenada em cache no agente, eu me conecto com êxito, mas não antes de receber a mensagem "Falha ao salvar a senha nas chaves". Ver esta mensagem de erro foi o que me levou a investigar mais; Não gosto de receber erros sempre que me conecto.

As coisas ficam interessantes ao olhar para a página de manual SSH_CONFIG (5) . Existem duas opções para lidar com o chaveiro, específicas da Apple: AskPassGUI e KeychainIntegration. Você pode alterná-los em ~ / .ssh / config, e isso gera alguns resultados interessantes.

Definindo AskPassGUI como no, você não será mais solicitado com uma caixa de diálogo no estilo OS X, em vez de uma linha de texto de entrada no seu terminal. Nada demais. Mas se você fizer isso, o ssh-agent não armazenará em cache suas credenciais. Isso está claramente quebrado e frustrante, porque eu poderia viver facilmente com o prompt de texto se as credenciais fossem armazenadas em cache.

Definindo KeychainIntegration como no, o ssh gera um erro grave, da seguinte maneira:

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

Minha pergunta, simplesmente, é a seguinte: Existe uma maneira de realmente desativar a Integração de Chaves do OS X para SSH?

Jim
fonte
Boa pergunta, não tenho uma resposta imediata, mas espero que com os votos que tenha, apareça no radar de alguém. Posso confirmar o erro na minha compilação do OS X com apenas um arquivo de configuração de uma linha - definir o valor como yes ou no falha como descrito.
bmike
Um ponto de esclarecimento: só recebo a mensagem "Falha ao salvar a senha nas chaves" quando o ssh-add armazena em cache as credenciais. Eu não vê-lo em cada tentativa de conexão, que é como ele lê, quando eu re-leitura ele. Com credenciais em cache, ele simplesmente se conecta silenciosamente, como seria de esperar.
21714 Jim

Respostas:

7

Com base no código fonte da versão atual do SSH que é fornecida com o Mavericks (localizada aqui ), parece que a funcionalidade da opção de configuração KeychainIntegrationainda não foi implementada. Estou fazendo essa suposição com base no conteúdo de openssh / readconf.h , que não faz referência à KeychainIntegrationopção. No entanto, faz referência à askpassguiopção. A verificação da estrutura "keywords" nesse arquivo mostra realmente que a keychainintegrationopção não está presente (o que, por sua vez, implica que o oBadOptioncódigo op (NULL) seria retornado).

Outra pista que implica que a funcionalidade que você deseja não é implementada da maneira que a página de manual especifica é o arquivo: openssh / keychain.c . O código-fonte mostra realmente que o defaultssistema (ou seja, arquivos da Lista de propriedades) está sendo usado para armazenar configurações relacionadas KeychainIntegration. Especificamente, as linhas da store_in_keychainfunção fazem referência 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;
}

Aqui está a get_boolean_preferencefunção correspondente . Observe que ele está usando CFPreferencesCopyAppValuepara obter um booleano a partir do identificador de aplicativo "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

Isso pode implicar que você pode desativar a KeychainIntegrationfuncionalidade executando este comando padrão:

defaults write org.openbsd.openssh KeychainIntegration -bool NO

ou para configurá-lo para todos os usuários:

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

Eddie Kelley
fonte
2
Você cavou fundo, e eu aprecio isso. Tentei configurar KeychainIntegrationa NOvia defaultscomo você sugeriu. sshem seguida, se comporta como se eu tivesse definido AskPassGUIem ~/.ssh/config- sem credenciais são armazenadas em cache, e eu estou solicitado a fornecer a senha o tempo todo. Menos que útil. Ainda assim, acho que você respondeu à pergunta, e a resposta é simplesmente: "Ela pode ser desativada, mas não está totalmente implementada e você provavelmente não gostará dos resultados".
Jim
Muito obrigado, eu estava procurando por toda parte para encontrar uma resposta para isso. Como eu tenho um arquivo .zshrc personalizado que eu porto entre o mac e o linux, isso me deixou louco porque o keychain estava assumindo o controle do gerenciamento do ssh-agent e das chaves adicionadas.
LF4