OS X Mavericks'te SSH KeychainIntegration'ı nasıl devre dışı bırakabilirim?


18

OS X Mavericks'te SSH KeychainIntegration ile ilgili bazı sorunlar yaşıyorum. Apple'ın destek sitesinde dolaşmayı denedim, ancak sorunum olan birini görmedim. Ben gördük görünüşte o kadar da iyi SSH nasıl kullanılacağını bilmiyorum bir sürü insan, bu yüzden başka bir topluluğa denemeye karar verdi.

İlk olarak, yapılandırmam çalışıyor. Anahtar çiftimi ve ssh'imi, istediğim gibi ana bilgisayarlara kullanabiliyorum, kimlik bilgilerim aracıya önbelleğe alındı. Önbelleğe alınmış kimlik bilgilerimi "ssh-add -l" üzerinden beklendiği gibi görebiliyorum. Şifremi, "Anahtarlığımdaki şifreyi hatırla" yazan bir onay kutusu olan bir OS X tarzı iletişim kutusuyla girmem isteniyor. Genelde bu onay kutusunu görmezden gelirim, ancak kontrol ettiğimde anahtarımı anahtarlığa yerleştirdiğimde görüyorum. Bu anahtarlıkta depolanan bu anahtar, görünüşe göre kullanılmaz, çünkü üzerinde bir parola var. En azından okuduğum çeşitli şeylerden topladığım şey buydu. Şifreyi diyaloga girdiğimde ve anahtar aracıya önbelleğe alındığında, başarılı bir şekilde bağlanıyorum, ancak "Şifreye anahtar şifreye kaydetme başarısız oldu" mesajı verilmeden önce başarılı bir şekilde bağlantı kurdum. Bu hata mesajını görmek, daha fazla araştırmamı sağlayan şeydi; Her bağlandığımda hata almaktan hoşlanmıyorum.

SSH_CONFIG (5) kılavuzuna bakıldığında işler ilginçleşiyor . Apple'a özgü anahtarlıkla başa çıkmak için iki seçenek vardır: AskPassGUI ve KeychainIntegration. Bunları ~ / .ssh / config içinde değiştirebiliyorsunuz ve bunu yapmak bazı ilginç sonuçlar veriyor.

AskPassGUI değerini hayır olarak ayarlamak, artık OS X tarzı bir iletişim kutusuyla değil, terminalinizde bir giriş metni satırıyla yönlendirilmeyeceksiniz. Hayır biggie. Ancak bunu yaparsanız, ssh-agent kimlik bilgilerinizi önbelleğe almayacaktır. Bu açıkça kırılmış ve sinir bozucu çünkü kimlik bilgileri önbelleğe alınmışsa kolayca metin istemi ile yaşayabilirim.

KeychainIntegration öğesini hayır olarak ayarlamak, ssh, aşağıdaki gibi zor bir hata verir:

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

Sorum şu, basitçe şudur: SSH için OS X Keychain Integration ürününü gerçekten devre dışı bırakmanın bir yolu var mı?


Güzel bir soru, hemen bir cevabım yok, ama sahip olduğu oylarla umarım birinin radarında belirir. OS X derlememdeki hatayı sadece bir satır yapılandırma dosyası ile onaylayabilirim - değeri evet olarak ayarlıyorum veya açıklanmadı.
bmike

Bir açıklama: Ssh-add, kimlik bilgilerini başarılı bir şekilde önbelleğe aldığında, yalnızca "Anahtarlığa anahtar şifreye kaydetme başarısız oldu" mesajını alıyorum. Ben yok ne zaman yeniden okumak, okur nasıl her bağlantı girişimi, üzerinde görmek. Önbelleğe alınmış kimlik bilgileriyle, beklediğiniz gibi kolayca bağlanır.
Jim

Yanıtlar:


7

Mavericks ile birlikte gelen ( burada bulunur ) mevcut SSH sürümünün kaynak koduna dayanarak , config seçeneğinin işlevselliğinin KeychainIntegrationhenüz uygulanmadığı görülüyor . Bu varsayımı , seçeneğe uymayan openssh / readconf.h dosyasının içeriğine dayanarak yapıyorum KeychainIntegration. Bununla birlikte, askpassguiseçenek referansta bulunur . Bu dosyadaki "anahtar kelimeler" yapısını kontrol etmek aslında keychainintegrationseçeneğin mevcut olmadığını göstermektedir (bu da oBadOption(NULL) op kodunun döndürüleceği anlamına gelir ).

Arzu ettiğiniz işlevselliğin man sayfasının belirttiği şekilde uygulanmadığını gösteren bir başka ipucu dosya: openssh / keychain.c . Kaynak kod aslında defaultssistemin (örneğin, Özellik Listesi dosyaları) ile ilgili ayarları depolamak için kullanıldığını gösterir KeychainIntegration. Özellikle, store_in_keychainKeychainIntegration işlev referansından satırlar :

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

İşte karşılık gelen get_boolean_preferencefonksiyon. CFPreferencesCopyAppValue"Org.openbsd.openssh" uygulama tanımlayıcısından bir boole almak için kullanıldığını unutmayın :

#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

Bu, KeychainIntegrationşu varsayılan komutu uygulayarak kendiniz için işlevselliği devre dışı bırakabileceğiniz anlamına gelebilir :

defaults write org.openbsd.openssh KeychainIntegration -bool NO

veya tüm kullanıcılar için ayarlamak için:

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


2
Derin kazdın ve minnettarım. Ben ayarlama çalıştı KeychainIntegrationetmek NOyoluyla defaultssize önerdiği gibi. sshBen belirlemiş olsaydınız olarak o davranır AskPassGUIiçinde ~/.ssh/config- hayır kimlik bilgileri önbelleğe alınır ve ben parola için her zaman istenir ediyorum. Kullanışlı değil. Yine de, soruyu cevapladığınızı düşünüyorum ve cevap basitçe, "Devre dışı bırakılabilir, ancak tam olarak uygulanmadı ve muhtemelen sonuçları beğenmeyeceksiniz."
Jim

Çok teşekkür ederim, bunun için bir cevap bulmaya çalışıyordum. Mac ve linux arasında taşıdığım özel bir .zshrc dosyasına sahip olduğum için, anahtarlığın ssh-agent'ı ve eklenen anahtarları yönetme kontrolünü ele geçirdiği beni delirtiyordu.
LF4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.