Làm cách nào tôi có thể vô hiệu hóa SSH KeychainIntegration trong OS X Mavericks?


18

Tôi đang gặp một số vấn đề với SSH KeychainIntegration trong OS X Mavericks. Tôi đã thử chọc vào trang web hỗ trợ của Apple, nhưng chưa thấy ai gặp vấn đề của tôi. Tôi đã thấy rất nhiều người dường như không biết sử dụng SSH tốt như vậy, vì vậy tôi quyết định thử một cộng đồng khác.

Đầu tiên, cấu hình của tôi đang hoạt động. Tôi có thể sử dụng cặp khóa và ssh của mình để lưu trữ khi tôi cần, với thông tin đăng nhập của tôi được lưu trong bộ đệm. Tôi có thể thấy thông tin đăng nhập được lưu trong bộ nhớ cache của mình thông qua "ssh-add -l", như mong đợi. Tôi được nhắc nhập mật khẩu của mình bằng hộp thoại kiểu OS X, với hộp kiểm có ghi "Ghi nhớ mật khẩu trong móc khóa của tôi". Tôi thường bỏ qua hộp kiểm này, nhưng khi tôi kiểm tra nó, tôi thấy khóa của tôi được lưu trong móc khóa. Khóa này được lưu trữ trong móc khóa dường như không bao giờ được sử dụng, tuy nhiên, vì tôi có mật khẩu trên đó. Ít nhất đó là những gì tôi đã lượm lặt được từ nhiều thứ tôi đã đọc. Khi tôi nhập mật khẩu của mình vào hộp thoại và khóa được lưu trong bộ đệm, tôi đã kết nối thành công, nhưng trước khi được thông báo "Lưu mật khẩu vào móc khóa thất bại". Nhìn thấy thông báo lỗi này là điều khiến tôi phải điều tra thêm; Tôi không muốn gặp lỗi mỗi khi kết nối.

Mọi thứ trở nên thú vị khi xem trang web SSH_CONFIG (5) . Hai tùy chọn để đối phó với móc khóa tồn tại, cụ thể đối với Apple: AskPassGUI và KeychainIntegration. Bạn có thể chuyển đổi chúng trong ~ / .ssh / config và làm như vậy sẽ mang lại một số kết quả thú vị.

Đặt AskPassGUI thành không, bạn sẽ không còn được nhắc với hộp thoại kiểu OS X, thay vào đó là một dòng văn bản đầu vào trong thiết bị đầu cuối của bạn. Không có vấn đề gì Nhưng nếu bạn làm điều này, thì ssh-agent sẽ không lưu thông tin đăng nhập của bạn. Điều này rõ ràng bị phá vỡ và bực bội vì tôi có thể dễ dàng sống với lời nhắc văn bản nếu thông tin đăng nhập được lưu trữ.

Đặt KeychainIntegration thành không, ssh đưa ra một lỗi cứng, như sau:

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

Câu hỏi của tôi, đơn giản là đây: Có cách nào để thực sự vô hiệu hóa Tích hợp OS X Keychain cho SSH không?


Câu hỏi hay, tôi không có câu trả lời ngay lập tức, nhưng hy vọng với số phiếu mà nó có, nó sẽ bật lên trên radar của ai đó. Tôi có thể xác nhận lỗi trên bản dựng OS X của mình chỉ bằng tệp cấu hình một dòng - đặt giá trị thành có hoặc không bị lỗi như mô tả.
bmike

Một điểm cần làm rõ: Tôi chỉ nhận được thông báo "Lưu mật khẩu vào móc khóa không thành công" khi ssh-add lưu trữ thành công thông tin đăng nhập. Tôi không thấy nó trên mọi nỗ lực kết nối, đó là cách nó đọc, khi tôi đọc lại nó. Với thông tin lưu trữ được lưu trữ, nó chỉ đơn giản là kết nối lặng lẽ, như bạn mong đợi.
Jim

Câu trả lời:


7

Dựa trên mã nguồn cho phiên bản SSH hiện tại đang vận chuyển với Mavericks (nằm ở đây ), có vẻ như chức năng của tùy chọn cấu hình KeychainIntegrationchưa được triển khai. Tôi đang đưa ra giả định này dựa trên nội dung của openssh / readconf.h , không tham chiếu KeychainIntegrationtùy chọn. Nó, tuy nhiên, tham chiếu các askpassguitùy chọn. Kiểm tra cấu trúc "từ khóa" trong tệp đó thực sự cho thấy keychainintegrationtùy chọn không có mặt (điều này ngụ ý rằng oBadOptionmã op (NULL) sẽ được trả về).

Một manh mối khác ngụ ý rằng chức năng bạn mong muốn không được triển khai theo cách mà trang man chỉ định là tệp: openssh / Keychain.c . Mã nguồn thực sự cho thấy rằng defaultshệ thống (tức là các tệp Danh sách tài sản) đang được sử dụng để lưu trữ các cài đặt liên quan đến KeychainIntegration. Cụ thể, các dòng từ store_in_keychaintham chiếu hàm 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;
}

Đây là get_boolean_preferencechức năng tương ứng . Lưu ý rằng nó đang sử dụng CFPreferencesCopyAppValueđể lấy boolean từ định danh ứng dụng "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

Điều này có thể ám chỉ rằng bạn có thể vô hiệu hóa KeychainIntegrationchức năng cho chính mình bằng cách thực hiện lệnh mặc định này:

defaults write org.openbsd.openssh KeychainIntegration -bool NO

hoặc để đặt nó cho tất cả người dùng:

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


2
Bạn đào sâu, và tôi đánh giá cao nó. Tôi đã cố gắng thiết lập KeychainIntegrationđể NOthông qua defaultsnhư bạn đề nghị. sshsau đó cư xử như thể tôi muốn thiết lập AskPassGUItrong ~/.ssh/config- không có thông tin được lưu trữ, và tôi đang nhắc nhở cho các cụm từ mật khẩu tất cả các thời gian. Ít hữu ích hơn. Tuy nhiên, tôi nghĩ rằng bạn đã trả lời câu hỏi và câu trả lời đơn giản là "Nó có thể bị vô hiệu hóa, nhưng nó không được thực hiện đầy đủ và có lẽ bạn sẽ không thích kết quả."
Jim

Cảm ơn bạn rất nhiều, tôi đã tìm kiếm tất cả để tìm câu trả lời cho điều này. Vì tôi có một tệp .zshrc tùy chỉnh mà tôi chuyển giữa mac và linux, nó đã khiến tôi phát điên rằng móc khóa đang kiểm soát việc quản lý ssh-agent và các khóa được thêm vào.
LF4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.