Tại sao GitHub đề xuất HTTPS qua SSH?


334

Trên trang GitHub có một liên kết ...

https://help.github.com/articles/generating-ssh-keys

... và nó tuyên bố ...

Nếu bạn đã quyết định không sử dụng phương pháp HTTPS được đề xuất, chúng tôi có thể sử dụng các khóa SSH để thiết lập kết nối an toàn giữa máy tính của bạn và GitHub. Các bước bên dưới sẽ hướng dẫn bạn cách tạo khóa SSH và sau đó thêm khóa chung vào tài khoản GitHub của bạn.

Tại sao HTTPS là phương pháp được đề xuất? Có một số lỗ hổng bảo mật trong phương thức SSH hay nó chậm hơn? Tôi đã tạo một khóa SSH, vì vậy điều đó có làm giảm bớt bất kỳ mối lo ngại nào về bảo mật không?


39
Cấu hình ít hơn có nghĩa là dễ dàng hơn, có lẽ. Ngoài ra, một số hệ điều hành kém hơn thậm chí không cài đặt máy khách SSH theo mặc định.
katspaugh

45
Đối với những người dùng tương lai tìm thấy chủ đề này: GitHub đã thay đổi chính sách của họ và hiện nói "Chúng tôi thực sự khuyên bạn nên sử dụng kết nối SSH khi tương tác với GitHub."
beardedlinuxgeek

9
@StevePomeroy, tôi không nghĩ rằng tuyên bố "khuyến nghị mạnh mẽ" tồn tại ở vị trí đó.
Noel Áp-ra-ham

5
@BottoOak Nó đã từng ở trên trang Steve Pomeroy được liên kết đến - web.archive.org/web/20140321204642/https://help.github.com/ . - nhưng có vẻ như họ đã thay đổi nó kể từ đó.
beardedlinuxgeek

5
@ br3nt Phải. Họ đã từng không giới thiệu nó. Sau đó, họ đã làm. Sau đó, họ đã không một lần nữa. Đó là lý do tại sao liên kết của tôi đến một trang archive.org
beardedlinuxgeek

Câu trả lời:


192

GitHub đã thay đổi đề xuất của họ nhiều lần ( ví dụ ).

Có vẻ như họ hiện đang đề xuất HTTPS vì đây là cách dễ nhất để thiết lập trên phạm vi rộng nhất của các mạng và nền tảng và bởi những người dùng mới đối với tất cả điều này.

Không có lỗ hổng cố hữu trong SSH (nếu có họ sẽ vô hiệu hóa nó) - trong các liên kết bên dưới, bạn sẽ thấy rằng họ vẫn cung cấp chi tiết về các kết nối SSH:

  1. HTTPS ít có khả năng bị chặn bởi tường lửa.

    https://help.github.com/articles/which-remote-url-should-i-use/

    URL clone https: // có sẵn trên tất cả các kho lưu trữ, công khai và riêng tư. Các URL này hoạt động ở mọi nơi - ngay cả khi bạn đứng sau tường lửa hoặc proxy.

  2. Kết nối HTTPS cho phép credential.helperlưu mật khẩu của bạn.

    https://help.github.com/articles/set-up-git

    Những điều cần biết: Trình trợ giúp thông tin chỉ hoạt động khi bạn sao chép URL repo HTTPS. Nếu bạn sử dụng URL repo SSH thay thế, các khóa SSH được sử dụng để xác thực. Mặc dù chúng tôi không khuyến nghị nhưng nếu bạn muốn sử dụng phương pháp này, hãy xem hướng dẫn này để được trợ giúp tạo và sử dụng khóa SSH.


51
À, vậy họ đề nghị HTTPS đơn giản để họ không phải làm tài liệu ssh-agent? Đủ công bằng. Cảm ơn!
đăng

74
@sarnold Có lẽ nó liên quan nhiều hơn đến khối lượng câu hỏi liên quan đến ssh-agent và quản lý khóa công khai, và số lượng tường lửa công ty cho phép HTTP / HTTPS bên ngoài nhưng không phải SSH.
Todd A. Jacobs

7
Tôi nghĩ rằng https giúp mọi người bắt đầu dễ dàng hơn vì bạn không phải thực hiện toàn bộ hoạt động kinh doanh tạo / sao chép / dán ssh. Ngoài ra, nó có thể được xem là an toàn hơn từ quan điểm của Github vì kẻ tấn công đã lấy mật khẩu ssh của bạn (hoặc tìm thấy một thiết bị đầu cuối máy tính mà bạn để mở) vẫn sẽ phải biết mật khẩu Github của bạn để đẩy bất cứ điều gì.
k107

4
@kristi Nếu kẻ tấn công tìm thấy thiết bị đầu cuối đó trước khi bộ đệm mật khẩu hết hạn, liệu anh ta vẫn có thể đẩy ngay cả khi anh ta không biết mật khẩu? Câu hỏi tương tự nếu bạn sử dụng ssh-agent, sự khác biệt rõ ràng là bạn phải nhập mật khẩu của khóa ssh thay vì mật khẩu github của bạn (và dường như không có cài đặt rõ ràng nào cho hết hạn bộ nhớ cache). Ý tưởng nhập mật khẩu github thay vì mật khẩu khóa ssh dường như là một bước lùi, mặc dù là một bước nhỏ vì sức mạnh mà hai phím cung cấp cho bạn là về cùng một AFAIK.
Halil Özgür

8
Tôi nghĩ rằng gần như hoàn toàn về việc giảm khối lượng truy vấn hỗ trợ mà họ nhận được. Tôi cho rằng bạn cũng có thể lập luận rằng vì dù sao bạn cũng phải nhập mật khẩu của mình qua HTTPS để truy cập trang web, bạn không thể tăng cường bảo mật bằng cách sử dụng một cơ chế xác thực khác (khóa SSH), nhưng khả thi là bạn đang tăng bề mặt tấn công có thể làm giảm an ninh. Tuy nhiên, cả HTTPS và SSH phải được bảo mật đầy đủ nếu được sử dụng đúng cách.
Cartroo

52

Tôi cho rằng HTTPS được GitHub khuyên dùng vì nhiều lý do

1) Sử dụng đơn giản hơn từ mọi nơi vì bạn chỉ cần chi tiết tài khoản của mình (không yêu cầu khóa SSH)

2) HTTPS Là một cổng được mở trong tất cả các tường lửa. SSH không phải lúc nào cũng mở như một cổng để liên lạc với các mạng bên ngoài

Do đó, kho GitHub có thể truy cập phổ biến hơn bằng HTTPS so với SSH.

Theo quan điểm của tôi, các khóa SSH đáng để làm thêm một chút trong việc tạo ra chúng

1) Khóa SSH không cung cấp quyền truy cập vào tài khoản GitHub của bạn, vì vậy tài khoản của bạn không thể bị xâm nhập nếu khóa của bạn bị đánh cắp,

2) Sử dụng cụm từ khóa mạnh với khóa SSH sẽ hạn chế mọi hành vi lạm dụng, ngay cả khi khóa của bạn bị đánh cắp

Nếu thông tin đăng nhập tài khoản GitHub (tên người dùng / mật khẩu) của bạn bị đánh cắp, mật khẩu GitHub của bạn có thể được thay đổi để chặn bạn truy cập và tất cả các kho lưu trữ được chia sẻ của bạn có thể nhanh chóng bị xóa.

Nếu khóa riêng bị đánh cắp, ai đó có thể đẩy mạnh kho lưu trữ trống và xóa sạch tất cả lịch sử thay đổi cho từng kho lưu trữ mà bạn sở hữu, nhưng không thể thay đổi bất cứ điều gì trong tài khoản GitHub của bạn. Sẽ dễ dàng hơn nhiều để thử phục hồi từ vi phạm này khi bạn có quyền truy cập vào tài khoản GitHub của mình.

Sở thích của tôi là sử dụng SSH với khóa được bảo vệ bằng mật khẩu. Tôi có một khóa SSH khác nhau cho mỗi máy tính, vì vậy nếu máy đó bị đánh cắp hoặc khóa bị xâm phạm, tôi có thể nhanh chóng đăng nhập vào GitHub và xóa khóa đó để ngăn truy cập không mong muốn.

SSH có thể được tạo đường hầm qua HTTPS nếu mạng bạn đang chặn cổng SSH.

https://help.github.com/articles/USE-ssh-over-the-https-port/

Nếu bạn sử dụng HTTPS, tôi khuyên bạn nên thêm xác thực hai yếu tố, để bảo vệ tài khoản cũng như kho lưu trữ của bạn.

Nếu bạn sử dụng HTTPS với một công cụ (ví dụ: trình chỉnh sửa), bạn nên sử dụng mã thông báo dành cho nhà phát triển từ tài khoản GitHub của mình thay vì lưu tên người dùng và mật khẩu trong cấu hình công cụ đó.


3
"mặc dù nếu ai đó nắm giữ khóa riêng của bạn, họ có thể đẩy mạnh kho lưu trữ trống và xóa sạch lịch sử thay đổi của bạn" - vâng (và sẽ rất tệ), nhưng vẻ đẹp của các cơ sở mã phân tán cho phép chúng tôi phục hồi với ai đó có một bản sao của nó ít nhất.
Cameron

Tôi không chắc chắn rằng ai đó có khả năng thúc đẩy là một điểm khác biệt giữa SSH và HTTPS. Nếu tôi có tên người dùng và mật khẩu của bạn, tôi cũng có thể buộc đẩy.
Matt Canty

Nếu bạn có tên người dùng và mật khẩu, bạn có thể xóa tất cả mọi thứ (sau khi thay đổi mật khẩu và liên hệ email). Không cần phải thực hiện lực đẩy riêng lẻ trên mỗi kho lưu trữ nếu bạn chỉ có thể xóa chúng.
jr0cket

bạn đang so sánh mật khẩu với khóa ssh trong khi kết nối https yêu cầu mã thông báo đặc biệt.
Alexey Sh.

13

Hoặc bạn đang trích dẫn sai hoặc github có đề xuất khác nhau trên các trang khác nhau hoặc họ có thể học theo thời gian và cập nhật reco của họ.

Chúng tôi thực sự khuyên bạn nên sử dụng kết nối SSH khi tương tác với GitHub. Khóa SSH là một cách để xác định các máy tính đáng tin cậy, không liên quan đến mật khẩu. Các bước bên dưới sẽ hướng dẫn bạn cách tạo khóa SSH và sau đó thêm khóa chung vào tài khoản GitHub của bạn.

https://help.github.com/articles/generating-ssh-keys


22
FWIW, trang này không còn chứa văn bản "khuyến nghị mạnh mẽ" được trích dẫn trong câu trả lời này.
Scott Isaacs

Việc vẫn sử dụng "được đề xuất" cho HTTPS trong liên kết sau: help.github.com/articles/which-remote-url-should-i-use/, "Nhân bản với URL HTTPS (được khuyến nghị)"
JBE

10

Kích hoạt kết nối SSH qua HTTPS nếu nó bị chặn bởi tường lửa

Kiểm tra xem SSH qua cổng HTTPS có khả thi hay không, hãy chạy lệnh SSH này:

$ ssh -T -p 443 git@ssh.github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

Nếu điều đó làm việc, tuyệt vời! Nếu không, bạn có thể cần phải làm theo hướng dẫn xử lý sự cố của chúng tôi .

Nếu bạn có thể SSH vào git@ssh.github.comcổng 443 , bạn có thể ghi đè cài đặt SSH của mình để buộc mọi kết nối tới GitHub chạy qua máy chủ và cổng đó.

Để đặt phần này trong cấu hình ssh của bạn, hãy chỉnh sửa tệp tại ~/.ssh/configvà thêm phần này:

Host github.com
  Hostname ssh.github.com
  Port 443

Bạn có thể kiểm tra xem cái này có hoạt động không bằng cách kết nối một lần nữa với GitHub:

$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

Từ Xác thực đến GitHub / Sử dụng SSH qua cổng HTTPS


9

Xem thêm: chính thức Tôi nên sử dụng URL từ xa nào? trả lời trên help.github.com.

BIÊN TẬP:

Dường như không còn cần thiết phải có quyền truy cập ghi vào repo công khai để sử dụng URL SSH, khiến cho lời giải thích ban đầu của tôi không hợp lệ.

NGUYÊN:

Rõ ràng lý do chính để ủng hộ URL HTTPS là URL SSH sẽ không hoạt động với repo công khai nếu bạn không có quyền truy cập ghi vào repo đó.

Tuy nhiên, việc sử dụng URL SSH được khuyến khích triển khai cho các máy chủ sản xuất - có lẽ bối cảnh ở đây là các dịch vụ như Heroku.


1
"Các URL này cung cấp quyền truy cập vào kho lưu trữ git qua SSH. Để sử dụng các URL này, bạn phải có quyền truy cập ghi vào kho lưu trữ công cộng hoặc mọi quyền truy cập vào kho lưu trữ riêng. Các URL này sẽ không hoạt động với kho lưu trữ công cộng mà bạn không có quyền truy cập ghi vào " - ĐÂY KHÔNG PHẢI LÀ SỰ THẬT. Bất cứ ai cũng có thể sao chép một repo công khai với một url SSH mà họ không có quyền truy cập ghi vào
Sam

1
@Sam Nó có thể không còn đúng nữa, nhưng là sự thật khi tôi trả lời câu hỏi. Tôi đã chỉnh sửa câu trả lời của mình để phản ánh sự thay đổi.
Đánh dấu Tye

Thật. Câu hỏi "Làm thế nào GitHub đề xuất HTTPS trên SSH" sẽ không có ý nghĩa.
Đánh dấu Tye

0

Có thể lập luận rằng việc sử dụng khóa SSH để xác thực sẽ kém an toàn hơn vì chúng tôi có xu hướng thay đổi mật khẩu theo định kỳ hơn là tạo khóa SSH mới.

Các máy chủ giới hạn tuổi thọ mà chúng sẽ tôn trọng các khóa SSH được cung cấp có thể giúp người dùng thực hiện việc làm mới các khóa SSH theo định kỳ.


Bây giờ được coi là lời khuyên tồi để khiến người dùng thay đổi mật khẩu theo định kỳ. Chế độ xem của Chính phủ Vương quốc Anh: ncsc.gov.uk/articles/probols-forcing-THER-password-Exiry
nazerb

-3

Có lẽ bởi vì việc đánh cắp mật khẩu từ não của bạn khó hơn sau đó đánh cắp một tệp chính từ máy tính của bạn (ít nhất là theo hiểu biết của tôi, có thể một số chất đã tồn tại hoặc phương pháp nhưng đây là một cuộc thảo luận vô tận)? Và nếu mật khẩu của bạn bảo vệ khóa, thì bạn đang sử dụng lại mật khẩu và các vấn đề tương tự phát sinh (nhưng một số người có thể cho rằng bạn phải làm nhiều việc hơn, vì bạn cần lấy khóa và sau đó bẻ khóa mật khẩu).

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.