Tôi cũng gặp vấn đề này khi cố gắng triển khai một số mã bằng Capistrano . Rất bực bội. Đây là hai phương pháp tôi biết để giải quyết vấn đề này.
Phương pháp 1: Thêm tất cả các khóa đã biết vào tác nhân SSH.
Vì vậy, một giải pháp tôi tìm thấy là chạy ssh-add
với -A
tùy chọn, trong đó thêm tất cả các danh tính đã biết vào tác nhân SSH bằng cách sử dụng bất kỳ cụm mật khẩu nào được lưu trữ trong móc khóa của bạn như thế này:
ssh-add -A
Bây giờ điều này hoạt động nhưng nó sẽ không tiếp tục trên các lần khởi động lại. Vì vậy, nếu bạn muốn không bao giờ lo lắng về điều này một lần nữa, chỉ cần mở ~/.bash_profile
tệp người dùng của bạn như thế này:
nano ~/.bash_profile
Và thêm dòng này vào dưới cùng:
ssh-add -A 2>/dev/null;
Bây giờ khi bạn mở một cửa sổ Terminal mới, tất cả sẽ tốt!
Phương pháp 2: Chỉ thêm các khóa SSH có trong móc khóa vào tác nhân.
Vì vậy, trong khi ssh-add -A
tùy chọn nên hoạt động cho hầu hết các trường hợp cơ bản, tôi đã gặp phải một vấn đề gần đây khi tôi có 6-7 hộp Vagrant (sử dụng các khóa / nhận dạng SSH để truy cập) trên một máy phổ biến hơn id_rsa.pub
.
Tóm lại, cuối cùng tôi đã bị khóa khỏi một máy chủ từ xa do có quá nhiều lần thử thất bại dựa trên các khóa / danh tính SSH vì quyền truy cập của máy chủ dựa trên mật khẩu và các khóa / danh tính SSH là các khóa / danh tính SSH. Vì vậy, nhân viên SSH đã thử tất cả các khóa SSH của tôi, không thành công và tôi thậm chí không thể nhận được lời nhắc mật khẩu.
Vấn đề là ssh-add -A
sẽ chỉ tùy ý thêm mọi khóa / nhận dạng SSH duy nhất mà bạn có vào đại lý ngay cả khi không cần thiết phải làm như vậy; chẳng hạn như trong trường hợp hộp Vagrant.
Giải pháp của tôi sau nhiều thử nghiệm như sau.
Đầu tiên, nếu bạn có nhiều khóa / danh tính SSH được thêm vào đại lý của mình hơn là bạn cần có như được hiển thị ssh-add -l
sau đó sẽ xóa tất cả chúng khỏi tác nhân như vậy:
ssh-add -D
Sau đó, bắt đầu tác nhân SSH làm quy trình nền như sau:
eval "$(ssh-agent -s)"
Bây giờ, nó trở nên kỳ lạ và tôi không chắc tại sao. Trong một số trường hợp, bạn có thể thêm ~/.ssh/id_rsa
khóa / danh tính cụ thể vào đại lý như vậy:
ssh-add ~/.ssh/id_rsa
Nhập cụm mật khẩu của bạn, nhấn Returnvà bạn sẽ tốt để đi.
Nhưng trong các trường hợp khác, chỉ cần chạy nó là đủ để thêm khóa / danh tính:
ssh-add -K
Nếu tất cả đều hoạt động, hãy nhập ssh-add -l
và bạn sẽ thấy một khóa / danh tính SSH đơn độc được liệt kê.
Tất cả đều tốt? Bây giờ hãy mở ra .bash_profile
:
nano ~/.bash_profile
Và thêm dòng này vào dưới cùng; nhận xét hoặc xóa -A
phiên bản nếu bạn có vị trí đó:
ssh-add -K 2>/dev/null;
Điều đó sẽ cho phép khóa / danh tính SSH được tải lại cho tác nhân SSH trong mỗi lần khởi động / khởi động lại.
CẬP NHẬT: Apple hiện đã thêm một UseKeychain
tùy chọn cho các tùy chọn cấu hình SSH đang mở và cũng xem xét ssh-add -A
một giải pháp.
Kể từ macOS Sierra 10.12.2, Apple đã thêm UseKeychain
tùy chọn cấu hình cho cấu hình SSH. Kiểm tra trang man (thông qua man ssh_config
) hiển thị thông tin sau:
UseKeychain
On macOS, specifies whether the system should search for
passphrases in the user's keychain when attempting to use a par-
ticular key. When the passphrase is provided by the user, this
option also specifies whether the passphrase should be stored
into the keychain once it has been verified to be correct. The
argument must be ``yes'' or ``no''. The default is ``no''.
Việc Apple sôi sục khi thấy giải pháp là thêm ssh-add -A
vào của bạn .bash_profile
như được giải thích trong vé Open Radar này hoặc thêm vào UseKeychain
như một trong các tùy chọn trong mỗi người dùng ~/.ssh/config
.
$ ssh-add -K
cho tôissh-add: illegal option -- K