ssh-add không liên tục giữa các lần khởi động lại


150

Tôi đã thêm khóa ssh cho tác nhân bằng cách:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Sau khi khởi động lại, tác nhân không có khóa này được thêm vào nữa:

$ ssh-add -l
The agent has no identities.

Tại sao điều này xảy ra?


Tôi không có thời gian để trả lời đầy đủ ngay bây giờ, nhưng gpg-agent trong chế độ ssh sẽ làm những gì bạn muốn. Hãy thử điều đó thay vì ssh-agent cũ. Nếu điều này giúp tôi có thể thử và mở rộng điều này khi tôi có thời gian sau này.
Vality

@Vality: Tôi nghi ngờ tác nhân gpg sẽ liên tục khởi động lại.
Pavel imerda

@ PavelŠimerda Nó mã hóa các khóa riêng bằng mật khẩu người dùng sau đó đặt chúng vào $HOME/.gnupg/private-keys-v1.dngay khi bạn thêm chúng bằng ssh-add. Nó thực sự là dai dẳng. Vâng giả sử bạn có một thư mục nhà không biến động.
Vality

@Vality: Không nên coi đó là vấn đề bảo mật? Bạn không thể sử dụng một khóa mà không có cụm mật khẩu và được thực hiện với nó mà không cần bất kỳ tác nhân nào?
Pavel imerda

1
@ PavelŠimerda Đây thực sự không phải là vấn đề bảo mật vì khóa được lưu trữ được mã hóa bằng mật khẩu người dùng, nó vẫn cần mật khẩu được nhập mỗi lần người dùng đăng nhập để giải mã nó. Lưu trữ khóa không được mã hóa có nghĩa là người dùng đã root (hoặc kẻ trộm lấy đĩa cứng của bạn) có thể đánh cắp chúng khỏi thư mục nhà của bạn, với gnupg nếu chúng đánh cắp chúng, chúng sẽ được mã hóa bằng mật khẩu của bạn và do đó vô dụng.
Vality

Câu trả lời:


174

Việc bổ sung các phím cho tác nhân là nhất thời. Họ chỉ kéo dài chừng nào đại lý đang chạy. Nếu bạn giết nó hoặc khởi động lại máy tính của bạn, chúng sẽ bị mất cho đến khi bạn thêm lại chúng. Từ ssh-agenttrang người đàn ông:

ssh-agent là một chương trình giữ các khóa riêng được sử dụng để xác thực khóa chung (RSA, DSA, ECDSA). Ý tưởng là ssh-agent được bắt đầu vào đầu phiên X hoặc phiên đăng nhập và tất cả các cửa sổ hoặc chương trình khác được bắt đầu với tư cách là khách hàng của chương trình ssh-agent. Thông qua việc sử dụng các biến môi trường, tác nhân có thể được định vị và tự động sử dụng để xác thực khi đăng nhập vào các máy khác bằng ssh (1).

Các đại lý ban đầu không có bất kỳ khóa riêng. Các khóa được thêm bằng ssh-add (1). Khi thực hiện không có đối số, ssh-add (1) cho biết thêm các tập tin ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsa~/.ssh/identity. Nếu danh tính có cụm mật khẩu, ssh-add (1) yêu cầu cụm mật khẩu trên thiết bị đầu cuối nếu nó có một hoặc từ một chương trình X11 nhỏ nếu chạy dưới X11. Nếu cả hai trường hợp này đều không đúng thì xác thực sẽ thất bại. Sau đó nó sẽ gửi danh tính cho các đại lý. Một số danh tính có thể được lưu trữ trong các đại lý; tác nhân có thể tự động sử dụng bất kỳ danh tính nào trong số này. ssh-add -lhiển thị danh tính hiện đang được giữ bởi các đại lý.

macOS Sierra

Bắt đầu với macOS Sierra 10.12.2 , Apple đã thêm tùy chọn cấu hình UseKeychain cho cấu hình SSH. Bạn có thể kích hoạt tính năng này bằng cách thêm UseKeychain yesvào ~/.ssh/config.

Host *
  UseKeychain yes

Móc khóa OSX

Tôi không sử dụng OSX nhưng đã tìm thấy Hỏi & Đáp này trên SuperUser có tiêu đề: Làm thế nào để sử dụng Mac OS X Keychain với các khóa SSH? .

Tôi hiểu rằng vì Mac OS X Leopard, Keychain đã hỗ trợ lưu trữ các khóa SSH. Ai đó có thể vui lòng giải thích làm thế nào tính năng này được cho là hoạt động.

Vì vậy, từ âm thanh của nó, bạn có thể nhập các khóa SSH của mình vào Keychain bằng lệnh này:

$ ssh-add -K [path/to/private SSH key]

Các phím của bạn sau đó sẽ tồn tại từ khởi động đến khởi động.

Bất cứ khi nào bạn khởi động lại máy Mac, tất cả các khóa SSH trong móc khóa của bạn sẽ được tự động tải. Bạn sẽ có thể thấy các phím trong ứng dụng Keychain Access, cũng như từ dòng lệnh thông qua:

  ssh-add -l

Nguồn: Super User - Cách sử dụng Mac OS X Keychain với các khóa SSH?


có thật không? Trên Linux tôi không có vấn đề này. Tôi có phải "ssh-add my_key" mỗi lần tôi khởi động lại máy tính không?
ア レ ッ

2
@Alex Như câu trả lời giải thích, đại lý tự động thêm vào ~/.ssh/id_rsa. Tôi đoán đây là vị trí của keyfile của bạn trên linux. Cũng có thể bạn không sử dụng tác nhân chính ssh tiêu chuẩn. Có những thứ khác, chẳng hạn như gnome-keyring-daemon, có thể có hành vi khác nhau.
Patrick

nhưng trên Mac, nó được đặt tên là "id_rsa_mac". Làm thế nào để tôi làm cho các đại lý thêm nó tự động?
ア レ ッ

@Patrick: Tôi không chắc liệu cổ điển ssh-agentcó tự động thêm bất kỳ phím nào không. Theo tôi, ssh-addđó là đọc các vị trí tiêu chuẩn hoặc sshứng dụng khách nếu bạn không sử dụng tác nhân.
Pavel imerda

5
Sidenote nhỏ, nếu lệnh ssh-add của bạn không nhận ra cờ -K mà bạn có thể đang sử dụng phiên bản macports của ssh-add ... bạn có thể bỏ qua phiên bản macports bằng cách chỉ định đường dẫn đầy đủ đến phiên bản OSX của ssh-add như thế này:/usr/bin/ssh-add -K /path/to/private/key
ChrisR

20

Đây ssh-agentlà một dịch vụ phiên lưu trữ các khóa tạm thời cho người dùng.

Mục đích chính của tác nhân SSH là ghi nhớ phiên bản Cleartext của khóa được bảo mật bằng cụm mật khẩu. Nói cách khác, khóa được lưu trữ trên đĩa được mã hóa bằng cụm mật khẩu và chủ sở hữu khóa sử dụng ssh-addhoặc một số công cụ GUI để cung cấp cụm mật khẩu và hướng dẫn tác nhân ghi nhớ cho đến khi phiên thoát hoặc người dùng yêu cầu xóa rõ ràng.

Nếu bạn không sử dụng cụm mật khẩu và bạn không sử dụng chuyển tiếp đại lý (dù không an toàn cho hầu hết các mục đích), bạn hoàn toàn không cần đại lý . Bất kỳ máy khách SSH nào cũng có thể đọc khóa từ đĩa, từ một vị trí tiêu chuẩn hoặc từ một vị trí được chỉ định rõ ràng.

Các vị trí tiêu chuẩn được liệt kê trong trang hướng dẫn ssh(1):

Mặc định là ~ / .ssh / nhận dạng cho giao thức phiên bản 1 và ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 và ~ / .ssh / id_rsa cho phiên bản giao thức 2.

Khi sử dụng các vị trí không chuẩn, bạn có thể sử dụng công -itắc để sshmô tả trong cùng một trang thủ công hoặc tùy chọn tương ứng trong ứng dụng SSH bạn đang sử dụng.


4
+1 để ủng hộ việc không sử dụngssh-agent
dg99

7

Sierra :

Sử dụng UseKeychain . (Tôi chưa thử cách này nhưng có vẻ như là giải pháp đúng nhất.)

Hoặc là

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Hoặc tạo một tệp plist thay vì nối thêm vào ~/.bash_profile.

Tuyên bố miễn trừ trách nhiệm: như những người khác đã lưu ý, tôi không biết việc lưu trữ các mật khẩu ssh trong móc khóa an toàn đến mức nào.


Tôi đã thử tất cả các phương pháp trên nhưng chỉ có một phương pháp này hoạt động. Cảm ơn bạn!
Duannx
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.