ฉันจะปิดการใช้งาน SSH KeychainIntegration ใน OS X Mavericks ได้อย่างไร


18

ฉันมีปัญหากับ SSH KeychainIntegration ใน OS X Mavericks ฉันลอง poking รอบไซต์สนับสนุนของ Apple แต่ไม่เห็นใครที่มีปัญหาของฉัน ฉันเคยเห็นผู้คนมากมายที่ดูเหมือนจะไม่รู้วิธีการใช้ SSH ที่ดีดังนั้นฉันตัดสินใจลองชุมชนอื่น

ก่อนอื่นการกำหนดค่าของฉันใช้งานได้ ฉันสามารถใช้คู่คีย์และ ssh กับโฮสต์ได้ตามที่ฉันต้องการเนื่องจากข้อมูลประจำตัวของฉันถูกแคชในเอเจนต์ ฉันสามารถดูข้อมูลรับรองแคชของฉันผ่าน "ssh-add -l" ตามที่คาดไว้ ฉันได้รับแจ้งให้ป้อนรหัสผ่านของฉันโดยกล่องโต้ตอบสไตล์ OS X พร้อมช่องทำเครื่องหมายที่ระบุว่า "จำรหัสผ่านในพวงกุญแจของฉัน" ฉันมักจะเพิกเฉยช่องทำเครื่องหมายนี้ แต่เมื่อฉันตรวจสอบมันฉันเห็นกุญแจของฉันเก็บไว้ในพวงกุญแจ กุญแจนี้ที่เก็บไว้ในพวงกุญแจนั้นดูเหมือนจะไม่เคยใช้งานเลยเนื่องจากฉันมีรหัสผ่านอยู่ อย่างน้อยนั่นคือสิ่งที่ฉันรวบรวมจากสิ่งต่าง ๆ ที่ฉันอ่าน เมื่อฉันป้อนรหัสผ่านลงในกล่องโต้ตอบและรหัสถูกแคชในเอเจนต์ฉันเชื่อมต่อสำเร็จ แต่ไม่ได้รับการแจ้งก่อน "การบันทึกรหัสผ่านไปยังพวงกุญแจล้มเหลว" การเห็นข้อความแสดงข้อผิดพลาดนี้เป็นสิ่งที่ทำให้ฉันต้องตรวจสอบเพิ่มเติม ฉันไม่ชอบรับข้อผิดพลาดทุกครั้งที่ฉันเชื่อมต่อ

สิ่งที่ได้รับที่น่าสนใจเมื่อมองไปที่ manpage ssh_config (5) มีสองตัวเลือกสำหรับจัดการกับพวงกุญแจโดยเฉพาะกับ Apple: AskPassGUI และ KeychainIntegration คุณสามารถสลับได้ใน ~ / .ssh / config และทำเช่นนั้นให้ผลลัพธ์ที่น่าสนใจ

การตั้งค่า AskPassGUI เป็นไม่คุณจะไม่ได้รับแจ้งจากกล่องโต้ตอบสไตล์ OS X อีกต่อไปแทนที่จะเป็นบรรทัดข้อความป้อนข้อมูลในเทอร์มินัลของคุณ ไม่มีปัญหา แต่ถ้าคุณทำเช่นนี้แล้ว ssh-agent จะไม่แคชข้อมูลประจำตัวของคุณ นี่เป็นข้อผิดพลาดอย่างชัดเจนและน่าผิดหวังเพราะฉันสามารถอยู่กับข้อความได้อย่างง่ายดายหากข้อมูลประจำตัวถูกแคช

การตั้งค่า KeychainIntegration เป็น no, ssh เกิดข้อผิดพลาดอย่างหนักดังนี้:

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

คำถามของฉันคือคำถามนี้มีวิธีปิดการใช้งานการผสานรวมของ OS X Keychain สำหรับ SSH หรือไม่


เป็นคำถามที่ดีฉันไม่ได้รับคำตอบทันที แต่หวังว่าด้วยคะแนนที่มีมันจะปรากฏขึ้นในเรดาร์ของใครบางคน ฉันสามารถยืนยันข้อผิดพลาดใน build ของ OS X ด้วยไฟล์ config เพียงบรรทัดเดียว - ตั้งค่าเป็นใช่หรือไม่ล้มเหลวตามที่อธิบายไว้
bmike

จุดของการชี้แจง: ฉันได้รับเฉพาะข้อความ "การบันทึกรหัสผ่านไปยังพวงกุญแจล้มเหลว" เมื่อ ssh-add ประสบความสำเร็จในการแคชข้อมูลประจำตัว ฉันไม่เห็นมันทุกครั้งที่มีการเชื่อมต่อซึ่งเป็นวิธีที่อ่านเมื่อฉันอ่านมันอีกครั้ง ด้วยข้อมูลประจำตัวที่เก็บไว้ในแคชมันเชื่อมต่ออย่างเงียบ ๆ อย่างที่คุณคาดหวัง
จิม

คำตอบ:


7

ขึ้นอยู่กับซอร์สโค้ดสำหรับ SSH เวอร์ชันปัจจุบันที่จัดส่งพร้อม Mavericks (อยู่ที่นี่ ) ปรากฏว่าฟังก์ชั่นการทำงานของตัวเลือกการกำหนดค่าKeychainIntegrationยังไม่ได้ใช้งาน ฉันทำสมมติฐานนี้ตามเนื้อหาของopenssh / readconf.hซึ่งไม่ได้อ้างอิงKeychainIntegrationตัวเลือก อย่างไรก็ตามมันอ้างอิงaskpassguiตัวเลือก การตรวจสอบโครงสร้าง "คำหลัก" ในไฟล์นั้นแสดงให้เห็นว่าไม่มีkeychainintegrationตัวเลือก (ซึ่งหมายถึงว่าoBadOptionรหัส op (NULL) จะถูกส่งคืน)

เบาะแสหมายความว่าฟังก์ชั่นที่คุณต้องการไม่ได้ดำเนินการในลักษณะที่ระบุหน้าคนหนึ่งคือไฟล์: openssh / keychain.c รหัสที่มาจริงแสดงให้เห็นว่าdefaultsระบบ (เช่นไฟล์รายการทรัพย์สิน) KeychainIntegrationจะถูกใช้ในการเก็บการตั้งค่าที่เกี่ยวข้องกับ โดยเฉพาะเส้นจากการstore_in_keychainอ้างอิงฟังก์ชัน 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;
}

นี่คือ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 write org.openbsd.openssh KeychainIntegration -bool NO

หรือเพื่อตั้งค่าสำหรับผู้ใช้ทั้งหมด:

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


2
คุณขุดลึกและฉันซาบซึ้ง ฉันพยายามตั้งค่าKeychainIntegrationเป็นNOผ่านdefaultsตามที่คุณแนะนำ sshแล้วทำงานเป็นถ้าฉันตั้งAskPassGUIใน~/.ssh/config- ข้อมูลประจำตัวที่ไม่มีจะถูกเก็บไว้และฉันพร้อมท์สำหรับรหัสผ่านตลอดเวลา มีประโยชน์น้อยกว่า ถึงกระนั้นฉันคิดว่าคุณตอบคำถามแล้วและคำตอบก็คือ "มันสามารถปิดการใช้งานได้ แต่ยังไม่ได้ใช้งานอย่างสมบูรณ์และคุณอาจไม่ชอบผลลัพธ์"
Jim

ขอบคุณมากฉันค้นหาทั่วเพื่อค้นหาคำตอบนี้ เนื่องจากฉันมีไฟล์. zshrc ที่กำหนดเองที่ฉันพอร์ตระหว่าง mac และ linux มันทำให้ฉันรู้ว่าพวงกุญแจกำลังควบคุมการจัดการ ssh-agent และคีย์ที่เพิ่มเข้ามา
LF4
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.