OS X Mavericks에서 SSH KeychainIntegration을 비활성화하려면 어떻게해야합니까?


18

OS X Mavericks의 SSH KeychainIntegration에 문제가 있습니다. Apple 지원 사이트를 둘러 보았지만 내 문제가있는 사람을 보지 못했습니다. 나는 SSH를 잘 사용하는 방법을 모르는 많은 사람들을 보았 으므로 다른 커뮤니티를 시도하기로 결정했습니다.

먼저 구성이 작동합니다. 자격 증명이 에이전트에 캐시 된 상태에서 필요에 따라 키 페어와 ssh를 호스트에 사용할 수 있습니다. 예상대로 "ssh-add -l"을 통해 캐시 된 자격 증명을 볼 수 있습니다. OS X 스타일 대화 상자에서 "키 체인의 암호 기억"확인란이있는 암호를 입력하라는 메시지가 표시됩니다. 나는 보통이 체크 박스를 무시하지만, 체크하면 키가 키 체인에 저장되어있는 것을 볼 수 있습니다. 그러나 키 체인에 저장된이 키는 암호가 없기 때문에 사용되지 않는 것 같습니다. 적어도 그것은 내가 읽은 다양한 것들에서 얻은 것입니다. 대화 상자에 암호를 입력하고 키가 에이전트에 캐시되면 "키 체인에 암호를 저장하지 못했습니다"라는 메시지가 표시되기 전에 연결되지 않았습니다. 이 오류 메시지를보고 추가 조사를 수행했습니다. 연결할 때마다 오류가 발생하는 것을 좋아하지 않습니다.

SSH_CONFIG (5) 맨 페이지를 보면 상황이 흥미로워 집니다. 애플과 관련된 키 체인을 다루는 두 가지 옵션 인 AskPassGUI와 KeychainIntegration이 있습니다. ~ / .ssh / config에서 이들을 토글 할 수 있으며, 그렇게하면 흥미로운 결과가 나타납니다.

AskPassGUI를 no로 설정하면 더 이상 OS X 스타일 대화 상자가 표시되지 않고 터미널의 입력 텍스트 줄이 표시됩니다. 더 큰. 그러나 이렇게하면 ssh-agent가 자격 증명을 캐시하지 않습니다. 자격 증명이 캐시 된 경우 텍스트 프롬프트로 쉽게 살 수 있기 때문에 이것은 일반적으로 망가졌으며 실망 스럽습니다.

KeychainIntegration을 no로 설정하면 ssh는 다음과 같이 심각한 오류를 발생시킵니다.

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

내 질문은 간단하게 다음과 같습니다. 실제로 SSH에 대해 OS X 키 체인 통합을 비활성화하는 방법이 있습니까?


좋은 질문입니다. 즉각적인 답변은 없지만 투표권이 있으면 누군가의 레이더에 나타납니다. 한 줄 구성 파일로 OS X 빌드에서 버그를 확인할 수 있습니다. 설명대로 값을 yes 또는 no로 설정하면 실패합니다.
bmike

요점 : ssh-add가 자격 증명을 성공적으로 캐시 할 때 "키 체인에 암호를 저장하지 못했습니다"라는 메시지 만 표시됩니다. 나는 모든 연결 시도에서 그것을 보지 못합니다 . 다시 읽을 때 읽는 방법입니다. 캐시 된 자격 증명을 사용하면 예상대로 조용히 연결됩니다.
Jim

답변:


7

Mavericks ( 여기위치 ) 와 함께 제공되는 현재 SSH 버전의 소스 코드를 기반으로 config 옵션의 기능이 KeychainIntegration아직 구현되지 않은 것으로 보입니다 . 나는 openssh / readconf.h 의 내용을 기반 으로이 가정을하고 있는데 , 이는KeychainIntegration옵션을 있습니다. 그러나 askpassgui옵션을 참조합니다 . 해당 파일에서 "keywords"구조체를 확인하면 실제로 keychainintegration옵션이 존재하지 않음을 나타냅니다 (이는 oBadOption(NULL) op 코드가 반환 됨을 의미 함 ).

원하는 기능이 매뉴얼 페이지가 지정하는 방식으로 구현되지 않았다는 것을 암시하는 또 다른 힌트는 openssh / keychain.c 파일 입니다. 소스 코드는 실제로 defaults시스템 (속성 목록 파일)이 관련 설정을 저장하는 데 사용되고 있음을 보여줍니다.KeychainIntegration . 특히 store_in_keychain함수 참조 키 체인 통합의 행은 다음과 같습니다.

/* 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;
}

해당 get_boolean_preference기능 은 다음과 같습니다 . 사용하고 있습니다.CFPreferencesCopyAppValue"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

이것은 당신이 비활성화 할 수 있음을 의미 할 수 있습니다 KeychainIntegration 이 defaults 명령을 수행하여 스스로 기능을 .

defaults write org.openbsd.openssh KeychainIntegration -bool NO

또는 모든 사용자에 대해 설정하려면 :

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


2
당신은 깊이 파고 들었습니다. 제안한대로 via 설정 KeychainIntegration을 시도 했습니다. 그럼 내가 설정 한 것처럼 동작 에서 자격 증명이 캐시되지 않으며, 내가 암호에 대한 모든 시간을 묻는 메시지가 있어요 -. 유용하지 않습니다. 아직도, 나는 당신이 그 질문에 대답했다고 생각하며, 그 대답은 간단하게 "비활성화 될 수는 있지만 완전히 구현되지 않았으며 아마도 결과를 좋아하지 않을 것입니다." NOdefaultssshAskPassGUI~/.ssh/config
Jim

이것에 대한 답을 찾기 위해 온통 검색을 해주셔서 감사합니다. 내가 맥과 리눅스 사이에 포팅하는 커스텀 .zshrc 파일을 가지고 있기 때문에 키 체인이 ssh-agent와 추가 된 키를 관리하는 것을 방해했다.
LF4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.