Bagaimana saya bisa menonaktifkan SSH KeychainIntegration di OS X Mavericks?

18

Saya mengalami beberapa masalah dengan SSH KeychainIntegration di OS X Mavericks. Saya sudah mencoba mencari-cari di situs dukungan Apple, tetapi belum melihat ada yang mengalami masalah saya. Saya telah melihat banyak orang yang tampaknya tidak tahu bagaimana menggunakan SSH dengan baik, jadi saya memutuskan untuk mencoba komunitas lain.

Pertama, konfigurasi saya berfungsi. Saya dapat menggunakan pasangan kunci dan ssh saya untuk host sesuai kebutuhan, dengan kredensial saya di-cache di agen. Saya dapat melihat kredensial cache saya melalui "ssh-add-l", seperti yang diharapkan. Saya diminta untuk memasukkan kata sandi dengan dialog gaya OS X, dengan kotak centang yang mengatakan "Ingat kata sandi di gantungan kunci saya". Saya biasanya mengabaikan kotak centang ini, tetapi ketika saya memeriksanya, saya melihat kunci saya disimpan di gantungan kunci. Namun, kunci yang disimpan di gantungan kunci ini sepertinya tidak pernah digunakan karena saya memiliki kata sandi. Setidaknya itulah yang telah saya kumpulkan dari berbagai hal yang saya baca. Ketika saya memasukkan kata sandi saya ke dalam dialog, dan kunci di-cache dalam agen, saya berhasil terhubung, tetapi tidak sebelum diberitahu "Menyimpan kata sandi ke gantungan kunci gagal". Melihat pesan kesalahan ini yang mendorong saya untuk menyelidiki lebih jauh; Saya tidak suka mendapat kesalahan setiap kali terhubung.

Hal-hal menjadi menarik ketika melihat halaman manual SSH_CONFIG (5) . Ada dua opsi untuk berurusan dengan gantungan kunci, khusus untuk Apple: AskPassGUI, dan KeychainIntegration. Anda dapat mengaktifkan ini di ~ / .ssh / config, dan dengan begitu menghasilkan beberapa hasil yang menarik.

Mengatur AskPassGUI ke no, Anda tidak akan lagi diminta dengan dialog gaya OS X, sebagai gantinya, baris teks input di terminal Anda. Bukan masalah besar. Tetapi jika Anda melakukan ini, maka ssh-agent tidak akan men-cache kredensial Anda. Ini jelas-jelas rusak, dan membuat frustrasi karena saya bisa dengan mudah hidup dengan prompt teks jika kredensial di-cache.

Mengatur KeychainIntegration ke no, ssh melempar kesalahan, sebagai berikut:

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

Pertanyaan saya, sederhana, apakah ini: Apakah ada cara untuk benar-benar menonaktifkan Integrasi Keychain OS X untuk SSH?

Jim
sumber
Pertanyaan yang bagus, saya tidak punya jawaban langsung, tetapi berharap dengan suara yang dimilikinya, itu akan muncul di radar seseorang. Saya dapat mengkonfirmasi bug pada build OS X saya hanya dengan file konfigurasi satu baris - mengatur nilai ke ya atau tidak gagal seperti yang dijelaskan.
bmike
Titik klarifikasi: Saya hanya menerima pesan "Menyimpan kata sandi ke gantungan kunci gagal" ketika ssh-add berhasil cache kredensial. Saya tidak melihatnya di setiap upaya koneksi, begitulah bunyinya, ketika saya membacanya kembali. Dengan kredensial yang di-cache, itu hanya terhubung dengan tenang, seperti yang Anda harapkan.
Jim

Jawaban:

7

Berdasarkan kode sumber untuk versi SSH saat ini yang dikirimkan bersama Mavericks (terdapat di sini ), tampaknya fungsionalitas opsi konfigurasi KeychainIntegrationbelum diimplementasikan. Saya membuat asumsi ini berdasarkan pada isi openssh / readconf.h , yang tidak merujuk KeychainIntegrationopsi. Namun demikian, referensi askpassguiopsi. Memeriksa struct "kata kunci" dalam file itu memang menunjukkan bahwa keychainintegrationopsi tidak ada (yang pada gilirannya menyiratkan bahwa oBadOptionkode op (NULL) akan dikembalikan).

Petunjuk lain yang menyiratkan bahwa fungsionalitas yang Anda inginkan tidak diterapkan dengan cara yang ditentukan halaman manual adalah file: openssh / keychain.c . Kode sumber sebenarnya menunjukkan bahwa defaultssistem (yaitu, file Daftar Properti) sedang digunakan untuk menyimpan pengaturan terkait KeychainIntegration. Secara khusus, baris dari store_in_keychainreferensi fungsi 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;
}

Berikut adalah get_boolean_preferencefungsi yang sesuai . Perhatikan bahwa menggunakan CFPreferencesCopyAppValueboolean untuk mendapatkan dari pengenal aplikasi "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

Ini mungkin menyiratkan bahwa Anda dapat menonaktifkan KeychainIntegrationfungsi untuk diri sendiri dengan melakukan perintah default ini:

defaults write org.openbsd.openssh KeychainIntegration -bool NO

atau untuk mengaturnya untuk semua pengguna:

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

Eddie Kelley
sumber
2
Anda menggali dalam-dalam, dan saya menghargainya. Saya mencoba setting KeychainIntegrationuntuk NOmelalui defaultssaat Anda disarankan. sshkemudian berperilaku seolah-olah aku set AskPassGUIdi ~/.ssh/config- tidak ada kredensial cache, dan saya diminta untuk passphrase sepanjang waktu. Kurang bermanfaat. Tetap saja, saya pikir Anda sudah menjawab pertanyaan itu, dan jawabannya adalah, "Itu bisa dinonaktifkan, tetapi itu belum sepenuhnya diterapkan, dan Anda mungkin tidak akan menyukai hasilnya."
Jim
Terima kasih banyak, saya mencari di seluruh untuk menemukan jawaban untuk ini. Karena saya memiliki file .zshrc kustom yang saya port antara mac dan linux, itu membuat saya gila bahwa gantungan kunci mengambil kendali mengelola ssh-agent dan kunci yang ditambahkan.
LF4