Thêm an toàn một máy chủ (ví dụ: GitHub) vào tệp SSH know_hosts


20

Làm cách nào tôi có thể thêm khóa máy chủ vào known_hoststệp SSH một cách an toàn?

Tôi đang thiết lập một máy phát triển và tôi muốn (ví dụ) ngăn không gitcho nhắc nhở khi tôi sao chép kho lưu trữ github.combằng SSH.

Tôi biết rằng tôi có thể sử dụng StrictHostKeyChecking=no(ví dụ: câu trả lời này ), nhưng điều đó không an toàn.

Cho đến nay, tôi đã tìm thấy ...

  1. GitHub xuất bản dấu vân tay SSH của họ tại https://help.github.com/articles/github-s-ssh-key-fingerprints/

  2. Tôi có thể sử dụng ssh-keyscanđể lấy khóa máy chủ cho github.com.

Làm thế nào để tôi kết hợp những sự thật này? Đưa ra một danh sách dấu vân tay được chuẩn bị trước, làm cách nào để xác minh rằng đầu ra của ssh-keyscancó thể được thêm vào known_hoststệp?


Tôi đoán tôi đang hỏi như sau:

Làm cách nào để lấy dấu vân tay cho một khóa được trả về ssh-keyscan?

Giả sử rằng tôi đã là MITM-ed cho SSH, nhưng tôi có thể tin tưởng trang HTTPS của GitHub (vì nó có chuỗi chứng chỉ hợp lệ).

Điều đó có nghĩa là tôi đã có một số khóa máy chủ SSH (nghi ngờ) (từ ssh-keyscan) và một số dấu vân tay (đáng tin cậy). Làm thế nào để tôi xác minh cái này với cái kia?


Liên quan: làm thế nào để tôi băm phần máy chủ của đầu ra từ ssh-keyscan? Hoặc tôi có thể trộn các máy chủ được băm / chưa băm trong known_hosts?


Tại sao nó không an toàn cho trường hợp sử dụng của bạn?
quadruplebucky

StrictHostKeyChecking=nodễ bị tổn thương bởi MITM. Có ssh-keyscanan toàn trước MITM không?
Roger Lipscombe

Tôi không hiểu tại sao tôi lại lo lắng quá mức về việc ai đó mạo danh một người lạ mà tôi chưa bao giờ gặp người mà tôi đủ tin tưởng để viết mã tôi sắp tải xuống và chạy ...
quadruplebucky

Bởi vì đây là mã nguồn của tôi trong một repo riêng trên github và tôi không muốn MITM (ví dụ) giới thiệu các thay đổi độc hại khi tôi đẩy các cam kết. Đó chỉ là một ví dụ.
Roger Lipscombe

Tôi (tốt hơn hoặc xấu hơn) chọn tin tưởng github. Tôi không chọn tin tưởng vào mọi liên kết mạng ngẫu nhiên giữa tôi và họ.
Roger Lipscombe

Câu trả lời:


11

Phần quan trọng nhất của việc thêm "khóa" một cách an toàn vào known_hoststệp là lấy dấu vân tay từ quản trị viên máy chủ. Dấu vân tay sẽ trông giống như thế này:

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

Trong trường hợp của GitHub, thông thường chúng ta không thể nói chuyện trực tiếp với quản trị viên. Tuy nhiên, họ đặt chìa khóa trên các trang web của họ để chúng tôi có thể khôi phục thông tin từ đó.

Cài đặt phím thủ công

1) Lấy một bản sao của chìa khóa từ máy chủ và lấy dấu vân tay của nó. NB: Làm điều này trước khi kiểm tra dấu vân tay.

$ ssh-keyscan -t rsa github.com | tee github-key-temp | ssh-keygen -lf -
# github.com:22 SSH-2.0-babeld-f3847d63
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

2) Nhận bản sao dấu vân tay chính từ quản trị viên máy chủ - trong trường hợp này điều hướng đến trang với thông tin trên github.com

  1. Truy cập github.com
  2. Chuyển đến trang trợ giúp (trên menu bên phải nếu đăng nhập; ở dưới cùng của trang chủ nếu không).
  3. Trong phần Bắt đầu , hãy đi tới Kết nối với GitHub bằng SSH
  4. Đi đến Kiểm tra kết nối SSH của bạn
  5. Sao chép dấu vân tay SHA256 từ trang đó vào trình soạn thảo văn bản của bạn để sử dụng sau.

3) So sánh các khóa từ hai nguồn

Bằng cách đặt chúng trực tiếp lên nhau trong trình soạn thảo văn bản, thật dễ dàng để xem liệu có gì đó đã thay đổi

2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA) #key recovered from github website
2048 SHA256:nThbg6kXUpJ3Gl7E1InsaspRomtxdcArLviKaEsTGY8 github.com (RSA) #key recovered with keyscan

(Lưu ý rằng khóa thứ hai đã bị thao túng, nhưng nó trông khá giống với khóa gốc - nếu điều này xảy ra, bạn đang bị tấn công nghiêm trọng và nên liên hệ với chuyên gia bảo mật đáng tin cậy.)

Nếu các khóa khác nhau hủy bỏ quy trình và liên lạc với chuyên gia bảo mật

4) Nếu các khóa so sánh chính xác thì bạn nên cài đặt khóa bạn đã tải xuống

cat github-key-temp >> ~/.ssh/known_hosts

Hoặc để cài đặt cho tất cả người dùng trên một hệ thống (với quyền root):

cat github-key-temp >> /etc/ssh/ssh_known_hosts

Cài đặt khóa tự động

Nếu bạn cần thêm khóa trong quá trình xây dựng thì bạn nên làm theo các bước 1-3 của quy trình thủ công ở trên.

Hoàn thành việc đó, kiểm tra nội dung github-key-temptệp của bạn và tạo tập lệnh để thêm các nội dung đó vào tệp máy chủ đã biết.

if ! grep github.com ~/.ssh/known_hosts > /dev/null
then
     echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" >> ~/.ssh/known_hosts
fi

Bây giờ bạn sẽ thoát khỏi bất kỳ sshlệnh nào đã StrictHostKeyCheckingbị vô hiệu hóa.


17

Bạn có thể trộn các mục được băm / chưa băm trong tệp know_hosts của mình.

Vì vậy, nếu bạn muốn thêm khóa github, bạn có thể thực hiện:

ssh-keyscan github.com >> ~/.ssh/known_hosts

Nếu bạn muốn nó được băm, thêm -H

ssh-keyscan -H github.com >> ~/.ssh/known_hosts


1
Sự khác biệt giữa băm / không băm là gì? Tôi biết băm là gì, không phải tại sao nó được áp dụng trong bối cảnh này.
Glen Thomas

3
Băm các mục của bạn cho phép bạn ẩn thông tin về các máy chủ bạn đang sử dụng để kết nối. Kiểm tra câu trả lời được chấp nhận tại security.stackexchange.com/questions/56268/ cấp
Cuối tuần

4
Điều này không trả lời câu hỏi. Sử dụng ssh-keyscan là đối tượng của một người đàn ông trong cuộc tấn công giữa, điều đó có nghĩa là khóa bạn lưu trữ có thể là chìa khóa thuộc về kẻ tấn công đang cố xâm nhập vào hệ thống của bạn. Xin vui lòng xem câu trả lời của tôi để biết cách kiểm tra mọi thứ.
Michael

Tham gia Thu hút sự chú ý cho câu trả lời không chính xác - "hai câu trả lời hàng đầu thực sự không an toàn"
Peter Mortensen

6

Cách dễ nhất là tìm nạp thủ công các phím bằng cách sử dụng ssh-keyscan, xác minh chúng theo cách thủ công:

$ ssh-keyscan -t rsa github.com | ssh-keygen -lf -
# github.com:22 SSH-2.0-libssh-0.7.0
2048 SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 github.com (RSA)

Và thêm chúng vào tập lệnh của bạn, sau đó sẽ mang khóa công khai "có thẩm quyền".


Tôi đã nhận được các khóa như bạn đã nói, làm cách nào để tôi thêm chúng vào tập lệnh của mình?
Glen Thomas

Hoặc là một tệp riêng biệt hoặc là một chuỗi trong tập lệnh của bạn.
Jakuje

Câu trả lời này rất nguy hiểm vì ẩn trong "xác minh chúng thủ công" là cả một quá trình khó khăn. Tôi đã thêm một câu trả lời dưới đây nhằm giải thích cách thực hiện điều đó và sử dụng kết quả một cách an toàn.
Michael

Tham gia Thu hút sự chú ý cho câu trả lời không chính xác - "hai câu trả lời hàng đầu thực sự không an toàn"
Peter Mortensen

1
@RogerLipscombe Tôi đồng ý câu trả lời có thể được diễn giải một cách an toàn - "xác minh chúng theo cách thủ công" không được giải thích, nhưng nếu bạn hiểu nó có nghĩa là "làm theo hướng dẫn trong trang hướng dẫn ssh" thì có lẽ sẽ ổn. Rủi ro ở đây là ai đó có thể không hiểu điều đó và có thể, ví dụ, thử những thứ không an toàn như kiểm tra khóa sau khi đăng nhập vào máy chủ. Đó là lý do tại sao tôi gọi câu trả lời này là "nguy hiểm" và một câu khác là "không an toàn" - chi tiết về cách bạn kiểm tra thủ công là một phần quan trọng. Cảm ơn đã chấp nhận.
Michael
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.