Làm cách nào tôi có thể thêm vĩnh viễn khóa riêng SSH vào Keychain để nó tự động có sẵn cho ssh?


419

Có vẻ như ssh-add -K ~/.ssh/id_rsasẽ tải khóa của bạn nhưng sẽ yêu cầu mật khẩu mỗi khi bạn khởi động lại.

Tôi đang tìm kiếm một giải pháp không yêu cầu tôi nhập lại mật khẩu chính giữa các lần đăng nhập.


1
Bạn có thể nói thêm một chút về thời điểm nhắc nhở mật khẩu cho bạn không? Tôi hỏi vì tôi có ssh-key cho một máy chủ từ xa, mà tôi đảm bảo với bạn không giống với mật khẩu đăng nhập Mac của tôi hoặc bất cứ điều gì và tôi đã không phải nhập mật khẩu cho khóa ssh trong nhiều năm . Tôi chỉ có thể mở một thiết bị đầu cuối, gõ "ssh <server>" và tôi ở đó. Tôi nghĩ rằng lần đầu tiên tôi thiết lập khóa này theo OSX 10.5. id_dsa, nhưng tôi không nghĩ rằng điều đó quan trọng.
Michael H.

id_rsaChìa khóa của tôi có mật khẩu trên đó.
sorin

Tôi cũng có một vấn đề mà tôi đã giải quyết điều này từ lâu đến nỗi tôi không thể nhớ chính xác những gì tôi đã làm. Nhưng tôi nghĩ ý tưởng là không chạy ssh-add, mà chỉ chạy sshtrực tiếp. Bạn sẽ nhận được một cửa sổ bật lên như là cụm từ thông qua cho khóa và với một hộp kiểm để cho phép bạn lưu trữ nó trong móc khóa của bạn.
Harald Hanche-Olsen

1
@Sorin - tôi cũng vậy! Tôi đã phải nhập nó một lần, từ lâu, và Mac đã lưu nó cho tôi kể từ đó. Hy vọng lời khuyên của Harald sẽ giúp ích.
Michael H.

Bạn có nghĩa là mật khẩu Keychain (tức là mật khẩu đăng nhập của bạn) hoặc cụm mật khẩu của khóa? Nếu đó là cụm từ sau, cụm mật khẩu của bạn chắc chắn được lưu trữ trong Keychain? Bạn có thể kiểm tra điều này bằng cách mở Keychain Access và tìm kiếm nó trong móc khóa đăng nhập.
Hội trường Mathew

Câu trả lời:


687

Trên OSX, ssh-addmáy khách gốc có một đối số đặc biệt để lưu cụm mật khẩu của khóa riêng trong khóa OSX, điều đó có nghĩa là thông tin đăng nhập bình thường của bạn sẽ mở khóa để sử dụng với ssh. Trên OSX Sierra trở lên, bạn cũng cần định cấu hình SSH để luôn sử dụng móc khóa (xem Bước 2 bên dưới).

Ngoài ra, bạn có thể sử dụng khóa mà không cần cụm mật khẩu, nhưng nếu bạn thích bảo mật chắc chắn chấp nhận được với quy trình công việc này.

Bước 1 - Lưu trữ chìa khóa trong móc khóa

Chỉ cần làm điều này một lần:

ssh-add -K ~/.ssh/[your-private-key]

Nhập cụm mật khẩu chính của bạn và bạn sẽ không được hỏi lại.

(Nếu bạn đang dùng phiên bản OSX trước Sierra, bạn đã hoàn thành, Bước 2 là không bắt buộc.)

Bước 2 - Cấu hình SSH để luôn sử dụng móc khóa

Dường như OSX Sierra đã loại bỏ hành vi thuận tiện trong việc duy trì các khóa của bạn giữa các lần đăng nhập và bản cập nhật cho ssh không còn sử dụng móc khóa theo mặc định. Vì điều này, bạn sẽ được nhắc nhập cụm mật khẩu cho một khóa sau khi bạn nâng cấp và một lần nữa sau mỗi lần khởi động lại.

Giải pháp khá đơn giản và được nêu trong nhận xét chủ đề github này . Đây là cách bạn thiết lập nó:

  1. Đảm bảo bạn đã hoàn thành Bước 1 ở trên để lưu trữ khóa trong móc khóa.

  2. Nếu bạn chưa có, hãy tạo một ~/.ssh/configtập tin. Nói cách khác, trong .sshthư mục trong thư mục nhà của bạn, tạo một tệp được gọi config.

  3. Trong .ssh/configtệp đó , thêm các dòng sau:

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    Thay đổi ~/.ssh/id_rsatên tệp thực của khóa riêng của bạn. Nếu bạn có các khóa riêng khác trong ~.sshthư mục của mình , hãy thêm một IdentityFiledòng cho mỗi khóa. Ví dụ: tôi có thêm một dòng đọc IdentityFile ~/.ssh/id_ed25519khóa riêng thứ 2.

    Đây UseKeychain yeslà phần quan trọng, yêu cầu SSH tìm trong móc khóa OSX của bạn để tìm cụm mật khẩu chính.

  4. Đó là nó! Lần tới khi bạn tải bất kỳ kết nối ssh nào, nó sẽ thử các khóa riêng mà bạn đã chỉ định và nó sẽ tìm cụm mật khẩu của chúng trong móc khóa OSX. Không cần gõ mật khẩu.


2
Điều này gần như làm việc cho tôi. Móc khóa "đăng nhập" của tôi đã bị khóa tự động, vì vậy câu trả lời của Matthew Sanabria đã không được áp dụng. Sử dụng ssh-add -K ...đã thêm các khóa vào tác nhân ssh mà không cần nhắc mật khẩu, nhưng chỉ cho phiên hiện tại. Sau khi khởi động lại, tôi phải cấp lại lệnh.
Poulsbo

4
@Poulsbo & @Abram - xem cập nhật của tôi, Sierra đã thay đổi hành vi tự động và bây giờ bạn phải chạy ssh-add -Athủ công để tải móc khóa đã lưu của mình. Một số giải pháp có thể được tham khảo ở trên.
trisweb

3
@trisweb Cảm ơn vì tiền boa. Giải pháp sửa đổi .ssh/configtập tin của joshbuchea có vẻ đầy hứa hẹn! Xem github.com/lionheart/openradar-mirror/issues/ từ
Poulsbo

2
@sorin xem câu trả lời cập nhật, và cho tôi biết nếu bạn có bất kỳ phản hồi nào. Cảm ơn!
trisweb

9
Hoạt động tuyệt vời! Trong trường hợp của tôi, tôi cần sử dụng Acờ cùng với cờ Kđể thêm các khóa của mình vào móc khóa và đăng ký cụm mật khẩu vào nó ( ssh-add -AK ~/.ssh/[your-private-key]). Cảm ơn!
youssman

22

Tôi gặp một vấn đề tương tự, đó là tôi đã được hỏi MỌI THỜI GIAN cho cụm mật khẩu khóa quán rượu của mình.

Theo đề xuất của người dùng "trisweb" ở trên, tôi đã bật các tùy chọn này thành ~ / .ssh / config:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

NHƯNG nó vẫn nhắc mỗi khi tôi muốn sử dụng ssh.

Cuối cùng, tôi bật "ssh -v" và tìm thấy dòng gỡ lỗi này:

debug1: key_load_private: cụm mật khẩu không chính xác được cung cấp để giải mã khóa riêng

Sau đó, tôi đã mở khóa của mình trong "Keychain Access.app", tìm thấy khóa có tên "SSH: /Users/username/.ssh/id_rsa" và mở nó ra.

Tôi đã nhấp vào "Hiển thị mật khẩu" để tiết lộ mật khẩu và thực sự thấy rằng cụm mật khẩu trong khóa là một cụm mật khẩu cũ.

Tôi đã cập nhật cụm mật khẩu trong Keychain Access và hiện không có mật khẩu.

Tôi cũng có thể đã cập nhật cụm mật khẩu với cụm từ này:

ssh-keygen -p -f ~ / .ssh / id_rsa


13

Bạn đang được nhắc nhập mật khẩu mỗi lần vì móc khóa "đăng nhập" của bạn đang bị khóa sau khi không hoạt động và / hoặc đang ngủ hoặc trong trường hợp của bạn là khởi động lại. Có hai cách để giải quyết điều này cho bạn.

  1. Thay đổi cài đặt cho móc khóa "đăng nhập" của bạn. Giả sử khóa ssh của bạn được lưu trong móc khóa "đăng nhập".

    • Mở truy cập Keychain
    • Đánh dấu móc khóa "đăng nhập"
    • Nhấp chuột phải hoặc tùy chọn nhấp vào móc khóa "đăng nhập"
    • Bỏ chọn hộp kiểm "Khóa sau X phút không hoạt động" và hộp kiểm "Khóa khi ngủ".
  2. Tạo một khóa SSH khác mà không cần sử dụng cụm mật khẩu.

    • Mở Terminal.
    • Nhập lệnh: ssh-keygen -t rsa -b 4096 -C <comment> -f <.ssh/id_rsa>
    • -t dành cho loại, -b là kích thước khóa, -C là nhận xét, tệp đầu ra -f (phải tạo thư mục trước)
    • Không đặt cụm mật khẩu.
    • Nhập khóa SSH vào móc khóa "đăng nhập" bằng ssh-add -K <path to ssh key>

Bạn không nên được nhắc nhập mật khẩu móc khóa nữa.


2
Lưu ý rằng khi gọi ssh-addtừ bên trong SSH, security unlock-keychainphải được gọi trước. Ngoài ra, tôi đã không phải tạo các thư mục cho -ftham số. Thật không may, tôi vẫn phải gọi security unlocl-keychaincác phiên SSH để truy cập Keychain đăng nhập, thông báo nhắc mật khẩu mỗi lần ...
Ohad Schneider

2
Toàn bộ vấn đề là có một cụm mật khẩu trên phím. Tôi nghi ngờ rằng việc tạo khóa SSH mới có ích cho câu hỏi.
Xám

7

Ngoài ra, trong macOS Sierra và HighSierra (không biết về các phiên bản trước), việc chạy ssh-add -Asẽ khiến tác nhân tải tất cả các khóa có cụm mật khẩu được lưu trữ trên Keychain ... Rất tiện dụng


7

Đối với tất cả những nơi trên không hoạt động, vấn đề của tôi dường như là do tôi đang sao chép UseKeychain yes& AddKeysToAgent yestrong tất cả các cấu hình / phím tắt ssh. Tôi đã cập nhật ~/.ssh/configtệp của mình để khai báo những thứ này chỉ một lần và bây giờ tất cả chúng đều tải khi đăng nhập mà không cần nhắc mật khẩu khi khởi động, ví dụ:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar

-3

Thêm khóa công khai vào:

.ssh/known_hosts

Khóa công khai thường được bật:

/home/user/.ssh/id_rsa.pub

Mong rằng sẽ giúp


8
Tôi nghĩ có nghĩa làauthorized_keys
Rene Larsen

Dù sao, điều này không hoạt động nếu bạn có nhiều hơn một khóa!
sorin
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.