2012-11-05 35 views
60

Github không cho phép cùng một khóa triển khai ssh được sử dụng cho nhiều dự án, điều này rất hữu ích trong một số trường hợp (ví dụ: máy chủ CI xử lý dự án với mô-đun phụ riêng). Tôi đã thấy các chủ đề khác nhau dường như nói rằng giới hạn này là vì 'lý do an ninh', nhưng tôi chưa thấy một lời giải thích thuyết phục về chính xác rủi ro sẽ tăng lên.Sử dụng cùng một khóa triển khai cho nhiều dự án github

Lưu ý rằng Github không cho phép các khóa Cấp tài khoản được sử dụng lại có ý nghĩa (hai người dùng không nên chia sẻ khóa). Đó chỉ là giới hạn đối với Triển khai khóa mà tôi đang đặt câu hỏi.

Và để rõ ràng, tôi là không phải tìm cách giải quyết (tạo người dùng giả, sử dụng nhiều khóa, ...), nhưng chỉ để giải thích hợp lý cho giới hạn này trên Deploy Keys.

chủ đề liên quan:

+0

Vì không có cách nào tốt hơn, chúng tôi đã tạo người dùng triển khai chuyên dụng mà chúng tôi đang cấp quyền truy cập chỉ đọc vào kho lưu trữ. Kết quả cuối cùng là như nhau. – Datageek

+0

Câu trả lời hay ở đây: http://stackoverflow.com/questions/11656134/github-deploy-keys-how-do-i-authorize-more-than-one-repository-for-a-single-mac – apple16

Trả lời

17

Lý do duy nhất, minh họa bằng các workaround bạn tham khảo (tạo một đĩa đơn "xây dựng" người dùng hoặc chia sẻ cùng một id_rsa.REPONAME.pub cho mỗi repo) là:

tránh chia sẻ công cộng/khóa riêng cho người dùng khác nhau

Mặc dù điều đó sẽ không phải là trường hợp trong tình huống của bạn (xây dựng nhiều dự án), cho phép tái sử dụng phím ssh cùng sẽ mở ra khả năng cho hai người dùng khác nhau để chia sẻ cùng một khóa ssh, điều này sẽ đánh bại mục đích xác thực .

Phương thức xác thực:
"sử dụng khóa ssh nhất định phải ngụ ý rằng bạn được yêu cầu phải biết ai đang sử dụng nó".


Các GitHub trang "Managing deploy keys" chi tiết các tài khoản khác nhau sử dụng ssh:

  • đại lý SSH chuyển tiếp: Đại lý giao nhận sử dụng các phím SSH đã được thiết lập trên máy tính phát triển địa phương khi bạn SSH vào máy chủ của bạn và chạy lệnh git.
    Bạn có thể chọn cho phép các máy chủ từ xa truy cập vào tác nhân ssh cục bộ của bạn như thể nó đang chạy trên máy chủ.
    Vì vậy, không cần sao chép khóa cá nhân của bạn trên máy chủ.

  • Người dùng máy: (đây là chiến lược "tài khoản giả") Đính kèm khóa vào tài khoản người dùng. Vì tài khoản này sẽ không được sử dụng bởi một con người, nó được gọi là người dùng máy.
    Bạn sẽ đối xử với người dùng này giống như cách bạn làm với con người, đính kèm khóa vào tài khoản người dùng máy như thể đó là một tài khoản bình thường.
    Cấp cho cộng tác viên tài khoản hoặc nhóm quyền truy cập vào các bản ghi mà họ cần quyền truy cập.
    Vì vậy, một khóa riêng tư được liên kết với một "người dùng máy", mỗi máy chủ một máy chủ.

  • Triển khai khóa (mỗi khóa GitHub repo) Khóa SSH được lưu trữ trên máy chủ và cấp quyền truy cập vào một repo trên GitHub.
    Khóa này được đính kèm trực tiếp vào repo thay vì tài khoản người dùng.
    Thay vì truy cập cài đặt tài khoản của bạn, hãy truy cập trang quản trị của mục tiêu của repo.
    Đi tới "Deploy Keys" và nhấp vào "Add deploy key". Dán khóa công khai vào và gửi.

Lần này, khóa ssh không được đính kèm với người dùng (mà bạn có thể cấp quyền truy cập cho nhiều repo), nhưng cho một repo.
Cấp quyền truy cập ssh cho một số repo sẽ tương đương với "người dùng máy".

Trong nhiệm kỳ của xác thực:

  • sử dụng phím tương tự cho nhiều Repos là okay khi nó được thực hiện bởi một người dùng (trong đó đã cho biết chính liên quan đến tài khoản/mình)
  • sử dụng cùng một chìa khóa cho một số repo là không ổn khi chìa khóa được gắn bởi một repo, bởi vì bạn không biết ở tất cả các người truy cập những gì.
    Điều này khác với "người dùng máy", trong đó "người dùng" được khai báo là cộng tác viên cho nhiều repo.
    Ở đây (Khóa triển khai), không có "cộng tác viên", chỉ là quyền truy cập ssh trực tiếp được cấp cho repo.
+33

Hỗ trợ GitHub cả hai * Khóa cấp tài khoản * khóa công khai và * Khóa cấp độ dự án * (còn gọi là Khóa triển khai). Không cho phép sử dụng lại * Các khóa * Cấp tài khoản có ý nghĩa, nhưng tôi cho rằng không cho phép nó cho * Deploy Keys * thì không.Khóa Cấp độ tài khoản của tôi cho phép truy cập vào tất cả các dự án của tôi, vậy tại sao tôi không thể có Khóa triển khai cho phép truy cập vào * một số * dự án của tôi? Nó chỉ hạn chế hơn và không tạo ra bất kỳ mối quan ngại nào mà tôi có thể thấy. Mối quan tâm của bạn về việc mở khả năng * cho hai người dùng khác nhau để chia sẻ cùng một khóa ssh * không xuất hiện trong hình ảnh trong kịch bản đó. –

+0

@DavidEbbo Nó có thể không có trong hình, nhưng mối quan tâm đó (hai người dùng khác nhau để chia sẻ cùng một khóa ssh) là cốt lõi của lý do tại sao một khóa ssh không được chia sẻ. – VonC

+12

Tôi e là tôi không làm theo lý do của bạn ở đây. Tôi hỏi về một kịch bản rất cụ thể (sử dụng một Deploy Key trong nhiều dự án), và đối số của bạn cho nó không thể được đưa lên một kịch bản không liên quan (hai người dùng chia sẻ các khóa ssh). Gắn bó độc quyền với kịch bản Deploy Key, điều gì sẽ là tiêu cực của github cho phép nó? –

1

Tôi đã suy nghĩ rất nhiều về việc hợp lý hóa các tác động và đưa ra kịch bản này.

Hãy tưởng tượng rằng bạn tạo một khóa triển khai duy nhất cho người dùng mà bạn đã gán cho nhiều kho lưu trữ. Bây giờ bạn muốn thu hồi khóa đó nhưng nó được sử dụng ở nhiều nơi. Vì vậy, thay vì có thể thu hồi tất cả truy cập, bạn có thể vô tình chỉ thu hồi quyền truy cập một phần.

Điều này nghe có vẻ giống như một lợi ích nhưng mối quan hệ nhiều-một này thực sự vốn không an toàn khi bạn xem xét yếu tố con người. Điều này là do bạn không thể biết chắc chắn bạn đã thực sự thu hồi tất cả truy cập mà không kiểm tra mọi kho lưu trữ và so sánh từng khóa công khai riêng lẻ trong trường hợp bạn đã quên nơi bạn đã thực sự gán nó. Nó chắc chắn là bực bội để gán và quản lý rất nhiều khóa duy nhất nhưng các tác động an ninh rõ ràng với cách GitHub đã thiết lập chính sách của họ: khi bạn thu hồi một khóa mà bạn đảm bảo thu hồi tất cả quyền truy cập do khóa đó cấp chỉ được sử dụng ở một nơi.

+0

Tôi không bị thuyết phục bởi lời giải thích này. Làm thế nào là cơ bản khác với việc cho phép một người dùng truy cập vào nhiều kho lưu trữ, điều này rõ ràng là được phép? Nếu bạn không còn tin tưởng người dùng đó nữa, bạn cần xóa họ khỏi mọi repo. –

+0

@David: 'Về cơ bản, điều đó khác biệt như thế nào khi cho phép một người dùng truy cập vào nhiều kho lưu trữ, rõ ràng là được phép 'Bạn có thể giải thích thêm về điều này không? Tôi chỉ có tài khoản Nhà phát triển và tôi thấy rằng bạn có thể thêm khóa ssh để truy cập toàn tài khoản (một khóa cho tất cả kho lưu trữ) hoặc thêm các khóa triển khai cá nhân (một khóa cho mỗi kho lưu trữ). Đây vẫn là mối quan hệ một-nhiều hoặc một-một, trong đó thu hồi khóa "một" sẽ thu hồi quyền truy cập "tất cả" trong cả hai trường hợp. – Zhro

+0

Để làm rõ thêm, không có cơ hội (những gì tôi có thể biết) để vô tình gán một khóa trong mối quan hệ nhiều-một, nơi quyền truy cập có thể tồn tại ở nơi khác sau khi bị thu hồi. Đây dường như là động cơ của GitHub cho sự hạn chế này nhưng tôi chỉ đoán thôi. – Zhro

Các vấn đề liên quan