Lời khuyên cho việc quản lý khóa SSH


13

Cách thực hành tốt nhất bạn đã tìm thấy để quản lý nhiều khóa bàn phím SSH là gì?

Tôi sử dụng SSH để kết nối với một số hệ thống, cả ở nhà và tại nơi làm việc. Tôi hiện có một bộ sưu tập bàn phím khá nhỏ, dễ quản lý cho cả hệ thống công việc và gia đình. Tôi có một kịch bản tạo ra một cặp khóa được đặt tên để tôi có thể tránh nhầm lẫn.

Mạng gia đình của tôi bao gồm máy tính xách tay của tôi (ubfox), hai máy tính để bàn (khởi động kép ubfox / fedora, bootora / windows dual) và hệ thống phương tiện (ubfox). Tại nơi làm việc, tôi có máy tính xách tay cá nhân (mà tôi sử dụng để làm việc ở nhà), máy tính để bàn (fedora), hệ thống sản xuất (RHEL) và máy tính xách tay có cửa sổ (thở dài) và VM (fedora). Tất cả đều tốt cho đến nay.

(Tôi không quan tâm đến việc đặt khóa nhà của mình vào hệ thống làm việc của tôi hoặc khóa công việc của tôi trên hệ thống nhà của tôi. Và chúng tôi có tài khoản người dùng ảo để cơ giới hóa chuyển tập tin với các hệ thống khác, trong đó khóa riêng phải nằm trên máy sản xuất, để chuyển tập tin giữa các hệ thống khác.)

Nhưng bây giờ đến Hadoop, một cụm lớn hơn 100 hệ thống, và với sự phức tạp hơn, nhiều người dùng hơn và nhiều bàn phím hơn. Bây giờ tôi cần quản lý khóa.

(Tôi cần làm rõ. Tôi là nhà phát triển phần mềm tư vấn cho khách hàng đang triển khai cụm Hadoop. Họ cần quản lý khóa. Sẽ có nhiều người truy cập vào cụm, cần đặt khóa công khai của họ lên hệ thống. Thông thạo Linux, họ nhờ tôi giúp đỡ. Tôi khuyên nên thuê một quản trị viên hệ thống, nhưng cho đến khi họ làm, tôi mới giúp)

Khi tôi cần xuất bản khóa chung lên một hệ thống từ xa, tất cả các trang web 'hướng dẫn' đề nghị ghi đè (>) (hủy khóa hiện tại) hoặc chắp thêm (>>) (tốt, giữ nguyên các khóa hiện có) . Nhưng tôi nghĩ sẽ bảo quản riêng từng khóa công khai trên máy đích và kết hợp chúng sẽ tốt hơn. Tôi đang tìm kiếm lời khuyên.

Thực tiễn tốt nhất bạn đã tìm thấy để quản lý nhiều khóa là gì?

Cảm ơn bạn!


Chỉnh sửa: Một khía cạnh là cần đặt khóa trên nhiều hệ thống và CRUD đồng thời (tạo, đọc, cập nhật, xóa / vô hiệu hóa) cho người dùng cụ thể, có nghĩa là cần phải xác định khóa nào thuộc về người dùng nào.


Bạn đang nói về người dùng hoặc máy chủ lưu trữ khóa? sshfpgiải quyết vấn đề về khóa máy chủ bằng cách đặt chữ ký của khóa chung vào DNS. Đối với thông tin đăng nhập của người dùng, bạn có thể muốn xem xét các chứng chỉ OpenSSH hoặc sử dụng một cái gì đó như Spacewalk hoặc con rối để lưu tất cả các cặp khóa vào một vị trí trung tâm và triển khai chúng khi cần. Âm thanh như bạn có thể muốn sau này vì bạn sẽ chỉ thiết lập máy chủ mới làm máy khách và sau đó triển khai phiên bản mới nhất của tệp.
Bratchley

Tôi có một máy tính xách tay khác (fedora), vào các đĩa mạng MyBook Live (chạy linux), hai máy tính để bàn được xây dựng đang chờ ổ cứng và lên kế hoạch cho hai chiếc nữa để xây dựng một cụm hadoop tại nhà (học tập). Vâng, tôi cần hiểu quản lý quan trọng.
ChuckCottrill

Câu trả lời:


12

Nói chung, bạn không nên có nhiều hơn 1 khóa cho mỗi máy khách (nhấn mạnh vào "nói chung"). Tôi không chắc là tôi có hiểu đúng câu hỏi của bạn không, nhưng nếu bạn nói rằng bạn có một khóa riêng cho mọi hệ thống từ xa, thì bạn chắc chắn đã làm sai.

Ssh sử dụng mật mã khóa công khai. Khóa bạn cài đặt trên hệ thống từ xa là khóa chung, hoàn toàn không có hại trong việc sử dụng lại khóa này ở nơi khác. Đó là khóa riêng phải được bảo vệ và vẫn còn trên hệ thống cá nhân của bạn.

Đó cũng là một ý tưởng tốt để có khóa riêng chỉ nằm trên một khách hàng, không được chia sẻ. Điều này là để nếu một khách hàng bị xâm phạm, bạn có thể thu hồi chỉ một khóa đó.


Bây giờ, nếu bạn hỏi làm thế nào bạn có thể đưa khóa công khai của mình ra hàng trăm hệ thống, có một số cách để thực hiện việc này.

Cách phổ biến nhất là sử dụng các thư mục nhà được chia sẻ. Có một NFS (hoặc hệ thống tệp mạng khác) được gắn kết (hoặc tự động hóa) tất cả các hệ thống.

Một cách khác là tận dụng một tính năng mới trong ssh. Đó là một chỉ thị cấu hình được gọi AuthorizedKeysCommand. Về cơ bản, đó là một lệnh mà sshd sẽ chạy mỗi khi nó cần tra cứu khóa công khai. Lệnh chỉ cần ghi khóa công khai của người dùng được truy vấn vào STDOUT. Điều này chủ yếu được sử dụng khi bạn không gắn thư mục chính, nhưng vẫn có máy chủ xác thực trung tâm ( FreeIPA tận dụng lợi thế này).

Tất nhiên bạn có thể làm những việc khác như cron job rsync trên /hometừ một máy chủ trung tâm. Nhưng đó không phải là một thực tế phổ biến.


Tôi có 8 máy ở nhà và một số "máy chủ" khác nhau trên đám mây (được thu nhỏ khi cần thiết). Sẽ thật ngớ ngẩn khi có 300 khóa khách khi tôi mở rộng tới 300 trường hợp máy chủ. Vì vậy, tôi có 16 khóa công khai (2 người dùng cho mỗi 8 máy chủ). Đối với máy cứng, tôi nhấn phím 3 tháng một lần. Đối với các trường hợp đám mây, chúng được tích hợp vào hình ảnh tùy chỉnh.
Skaperen

2

Khi tôi cần xuất bản khóa chung lên một hệ thống từ xa, tất cả các trang web 'hướng dẫn' đề nghị ghi đè (>) (hủy khóa hiện tại) hoặc chắp thêm (>>) (tốt, giữ nguyên các khóa hiện có) . Nhưng tôi nghĩ sẽ bảo quản riêng từng khóa công khai trên máy đích và kết hợp chúng sẽ tốt hơn. Tôi đang tìm kiếm lời khuyên.

tôi không thấy bất kỳ lợi thế nào trong việc lưu trữ các khóa công khai cả trong .ssh/authorized_keysvà trong một tệp riêng biệt.

nếu bạn nhìn vào các khóa thực tế được lưu trữ trong tệp * ủy quyền * bạn sẽ thấy rằng chúng đã chứa thông tin meta có thể đọc được của con người về nguồn gốc của khóa. ví dụ: khóa công khai user@foothường có một mục như:

ssh-rsa AAAAB3Nza...LiPk== user@example.net

do đó, rất dễ dàng để kiểm tra / trích xuất / xóa một số khóa nhất định (được đính kèm với một số người dùng nhất định) từ tệp * ủy quyền *.

id người dùng thực sự là một trường "bình luận" dạng tự do, vì vậy bạn có thể đặt bất kỳ thông tin nào vào đó, mà bạn nghĩ cần thiết để xác định khóa đã cho.

trong mọi trường hợp, bạn chỉ nên tạo các cặp khóa cho "người dùng" cần truy cập các nguồn tài nguyên từ xa. rất có thể, bạn không cần phải đăng nhập từ mỗi máy chủ hadoop sang máy chủ hadoop khác. thay vào đó, bạn sẽ có một vài máy quản lý, cần truy cập vào tất cả các máy chủ hadoop. bạn chỉ cần một cặp khóa duy nhất cho mỗi máy quản lý và cài đặt từng khóa chung trên tất cả các máy chủ hadoop.


Mỗi người dùng sẽ tạo khóa riêng của họ, tôi tin rằng bạn đang nói mỗi người dùng nên cung cấp tên người dùng @ tên máy chủ như một phần của nguồn gốc khóa. Điều đó có nghĩa là một tập lệnh thực thi tên người dùng @ tên máy chủ được cung cấp, phải không?
ChuckCottrill

nó phụ thuộc vào cách họ tạo khóa của họ; ví dụ ssh-keygensẽ thêm một nhận xét của mẫu thứ user@host; các trình tạo khóa khác (như cái đi kèm với putty) có thể không làm điều đó. nhưng vâng, thật đơn giản để tạo một tập lệnh nhỏ để đảm bảo rằng mỗi khóa có trường nhận xét xác định kết hợp người dùng / máy chủ lưu trữ.
umläute

1

OpenSSH gần đây cho phép nhận các khóa ssh từ LDAP, xem 'AuthorizedKeysCommand' trong trang man sshd_config . Cá nhân tôi thích chứng chỉ OpenSSH, không phải khóa, xem http://blog.habets.pp.se/2011/07/OpenSSH-certert . Bạn có thể quản lý các phím với bất kỳ trình quản lý cấu hình nào như cengine, con rối, đầu bếp, muối ...


0

Một cách khác cực kỳ dễ thực hiện và cho phép linh hoạt hơn một chút về việc thêm nhiều người dùng là sử dụng. https://userify.com/

Nó cho phép bạn xác định các nhóm máy chủ khác nhau và có khóa cho những người dùng khác nhau được bật hoặc tắt cho các máy chủ đó.

Quản lý và cài đặt siêu đơn giản.

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.