Hệ thống tốt nhất để quản lý khóa ssh? [đóng cửa]


42

Tôi đã có một số máy tính khách (ví dụ: máy tính xách tay, máy tính để bàn, v.v.) và tôi kết nối với một số máy chủ mà tôi quản lý và tôi đăng nhập vào tất cả chúng thông qua SSH. Tôi có thể tưởng tượng một số kế hoạch quản lý khóa ssh có ý nghĩa và tôi tò mò về những gì người khác làm.

Tùy chọn 1: Một cặp khóa công khai / riêng tư toàn cầu.

Tôi sẽ tạo một cặp khóa công khai / riêng tư và đặt khóa riêng trên mọi máy khách và khóa chung trên mọi máy chủ.

Tùy chọn 2: Một cặp khóa cho mỗi máy chủ.

Tôi sẽ tạo một cặp khóa trên mỗi máy chủ và đặt từng khóa riêng trên các máy khách của mình.

Tùy chọn 3: Một cặp khóa cho mỗi máy khách.

Mỗi máy khách sẽ có một khóa riêng và mỗi máy chủ sẽ có các khóa chung cho mọi máy khách mà tôi muốn kết nối.

Tùy chọn 4: Một cặp khóa cho mỗi cặp máy khách / máy chủ

Hoàn toàn quá nhiệt tình?

Cái nào trong số này là tốt nhất? Có những lựa chọn khác? Tiêu chí nào để bạn sử dụng để đánh giá cấu hình phù hợp?

Câu trả lời:


33

Tôi sử dụng Tùy chọn 3: Một cặp khóa cho mỗi máy khách và nó có ý nghĩa nhất đối với tôi. Dưới đây là một số lý do:

  • Nếu một máy khách bị xâm phạm thì khóa đó (và chỉ khóa đó) cần phải được xóa khỏi máy chủ.
  • Nó đủ linh hoạt để quyết định những gì tôi có thể truy cập từ đâu, mà không cấp quyền truy cập mền cho tất cả các máy chủ từ tất cả các máy khách.
  • Rât thuận tiện. Chỉ có 1 khóa cho ssh-add, không có sự nhầm lẫn.
  • Dễ dàng thiết lập và quản trị trên Tùy chọn 4

Lựa chọn 4 là tốt, nhưng chỉ là quá nhiều công việc. Tùy chọn 3 giúp bạn có 98% ở đó với ít rắc rối hơn.


4
Tôi không thấy điểm của Lựa chọn 4. Nó không phục vụ mục đích gì.
niXar

26

Tôi sử dụng một giải pháp phức tạp hơn một chút nhưng rất linh hoạt vì tôi muốn duy trì sự tách biệt trong các khóa nhận dạng SSH được sử dụng cho các máy chủ mạng gia đình, máy chủ văn phòng, tư vấn máy chủ mạng khách hàng và các hệ thống khác mà tôi có tài khoản.

Bây giờ tôi nói rằng tôi làm việc từ các máy trạm Linux hầu như chỉ có một khóa USB được thiết lập bằng mã hóa LUKS và trình quản lý cửa sổ X11 của tôi cùng với trình nền HAL phát hiện ổ đĩa được mã hóa LUKS và nhắc nhở mật khẩu giải mã khi nó được chèn và cố gắng được gắn kết. Bằng cách lưu trữ cái này trên một ổ đĩa được mã hóa theo cách tôi không bao giờ lưu trữ các khóa SSH của mình trên bất kỳ máy trạm nào.

Sau đó tôi có cấu hình sau trong ~/.ssh/configtệp của mình :

Host *
    Protocol 2
    IdentityFile %d/.ssh/keys.d/id_rsa.%l
    IdentityFile %d/.ssh/keys.d/id_dsa.%l
    IdentityFile %d/.ssh/keys.d/%u@%l

Các % d được dịch là thư mục home của người dùng bằng OpenSSH và trong ~ / .ssh thư mục Tôi đã tạo ra keys.d như một liên kết tượng trưng đến đường dẫn thư mục trên ổ đĩa USB được mã hóa khi nó được gắn đúng cách.

Các % l biểu được phiên dịch sang được các máy client địa phương hostname và % u sẽ được dịch sang tên cho khách hàng địa phương.

Cấu hình này làm gì là cho phép SSH tìm kiếm khóa bằng 3 biểu thức khác nhau. Ví dụ: nếu tên người dùng jdoecủa máy khách cục bộ của tôi là và tên máy khách cục bộ của tôi examplehostthì nó sẽ tìm theo thứ tự sau cho đến khi tìm thấy khóa tồn tại và được máy chủ từ xa chấp nhận.

/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost

Thậm chí, bạn có thể sử dụng biểu thức % r để tìm khóa cụ thể cho tên người dùng máy chủ từ xa hoặc % h cho tên máy chủ của máy chủ từ xa giống như % u% l đã được sử dụng.

Cập nhật: Bây giờ tôi thực sự sử dụng gpg-agent GnuPG với khả năng tương thích ssh-agent để chỉ đọc và sử dụng khóa xác thực từ thẻ thông minh OpenPGP v2 của tôi.


Wow, giải pháp tuyệt vời, cảm ơn! Tôi yêu cấu hình phổ quát trong ~ / .ssh / config
slacy

Nó được chứng minh là khá thuận tiện để giữ mọi thứ riêng biệt cho công việc, cá nhân và tư vấn máy chủ mạng máy khách ... Tôi không muốn trộn lẫn xác thực giữa chúng nhưng cũng muốn nó dễ dàng với tôi.
Jeremy Bouse

Kinh ngạc! Tôi thật sự yêu nó.
balu

Tôi giả sử bạn đang sử dụng các khóa USB khác nhau cho các máy khách khác nhau. Mặt khác, điểm nào trong các khóa riêng biệt nếu tất cả chúng được lưu trữ ở cùng một nơi? Trong trường hợp vi phạm, bạn sẽ cần thu hồi tất cả chúng. Trừ khi (và có lẽ) tôi đang thiếu thứ gì đó dường như làm phức tạp mọi thứ.
Halil Özgür

@ HalilÖzgür, Có, tôi tư vấn và không luôn muốn sử dụng cùng một khóa. Vì khóa USB được mã hóa và không được kết nối với bất kỳ máy tính nào trừ khi tôi cần nó để tạo kết nối, không có vấn đề gì về việc máy chủ bị vi phạm và cụm mật khẩu để giải mã hệ thống tệp ổ đĩa đủ dài để thu hồi khóa đủ đơn giản.
Jeremy Bouse

6

Tôi sẽ loại bỏ cả hai tùy chọn 1 của bạn (trong đó tôi nghi ngờ một tùy chọn được cho là tùy chọn 2 ;-) vì khóa riêng là dữ liệu nhạy cảm và nên giữ chúng ở càng ít nơi càng tốt. Cá nhân tôi sẽ không bao giờ sao chép khóa riêng từ máy tính này sang máy tính khác (hoặc thậm chí từ tệp này sang tệp khác trên cùng một máy tính), ngoại trừ có thể để tạo bản sao lưu. Mặc dù không giống như hầu hết các khóa mã hóa, nếu khóa SSH bị mất thì đó không phải là ngày tận thế (chỉ cần tạo một khóa mới, bạn sẽ không mất bất kỳ dữ liệu nào).


Vâng, được đổi tên thành "Tùy chọn 2" thích hợp Tôi thích quy tắc "không bao giờ sao chép khóa riêng". Đó là một quy tắc tốt.
slacy

1

Tùy chọn 3 và sử dụng một cái gì đó như Puppet để xử lý việc quản lý khóa.


Đây có phải là reducteelsabs.com/trac/puppet/wiki/PuppetIntributiontion liên kết đến Puppet không?
Andy

Vâng, đó là nó. Hãy chắc chắn kiểm tra một số ví dụ trên trang web. Giúp xem những gì người khác đã làm - không cần phải phát minh lại bánh xe.
diq

1

Lựa chọn 3.

Điều này cũng cho phép bạn kiểm soát máy chủ nào khách hàng có thể truy cập. ví dụ: nếu máy khách X cần truy cập vào máy chủ A và B, nhưng C hoặc D, bạn sao chép khóa công khai của nó vào chỉ các máy chủ đó.

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.