Dlaczego GitHub zaleca HTTPS zamiast SSH?

334

Na stronie GitHub znajduje się link ...

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

... i stwierdza ...

Jeśli zdecydujesz się nie używać zalecanej metody HTTPS, możemy użyć kluczy SSH w celu ustanowienia bezpiecznego połączenia między komputerem a GitHub. Poniższe kroki przeprowadzą Cię przez proces generowania klucza SSH, a następnie dodawania klucza publicznego do konta GitHub.

Dlaczego HTTPS jest zalecaną metodą? Czy jest jakaś luka w zabezpieczeniach w metodzie SSH, czy jest ona wolniejsza? Utworzyłem klucz SSH, więc czy złagodziłoby to jakiekolwiek obawy związane z bezpieczeństwem?

John Livermore
źródło
39
Mniej konfiguracji oznacza być może łatwiejsze. Poza tym niektóre gorsze systemy operacyjne nie mają domyślnie zainstalowanych klientów SSH.
katspaugh
45
Do przyszłych użytkowników, którzy znajdą ten wątek: GitHub zmienił swoje zasady i teraz mówi „Zdecydowanie zalecamy używanie połączenia SSH podczas interakcji z GitHub”.
beardedlinuxgeek
9
@ StevePomeroy, nie sądzę, aby w tym miejscu istniało zdanie „zdecydowanie polecam”.
Noel Abrahams
5
@BonsaiOak To kiedyś było na stronie, do której Steve Pomeroy jest połączony - web.archive.org/web/20140321204642/https://help.github.com/… - ale wygląda na to, że od tego czasu zmienili.
beardedlinuxgeek
5
@ br3nt Right. Kiedyś tego nie polecali. Potem zrobili. Potem już nie. Właśnie dlatego mój link prowadzi do strony archive.org
beardedlinuxgeek

Odpowiedzi:

192

GitHub kilkakrotnie zmieniał swoje rekomendacje ( przykład ).

Wygląda na to, że obecnie zalecają HTTPS, ponieważ najłatwiej jest go skonfigurować w najszerszym zakresie sieci i platform oraz dla użytkowników, którzy są nowi w tym wszystkim.

W SSH nie ma nieodłącznej wady (gdyby ją wyłączono) - w poniższych linkach zobaczysz, że nadal zawierają szczegółowe informacje o połączeniach SSH:

  1. Jest mniej prawdopodobne, że HTTPS zostanie zablokowany przez zaporę ogniową.

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

    Klonowane adresy URL https: // są dostępne we wszystkich repozytoriach, publicznych i prywatnych. Te adresy URL działają wszędzie - nawet jeśli jesteś za zaporą ogniową lub serwerem proxy.

  2. Połączenie HTTPS umożliwia credential.helperbuforowanie hasła.

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

    Warto wiedzieć: pomocnik poświadczeń działa tylko po sklonowaniu adresu URL repozytorium HTTPS. Jeśli zamiast tego użyjesz adresu URL repozytorium SSH, klucze SSH są używane do uwierzytelniania. Chociaż nie zalecamy tego, jeśli chcesz skorzystać z tej metody, zapoznaj się z tym przewodnikiem, aby uzyskać pomoc w generowaniu i używaniu klucza SSH.

k107
źródło
52
Ach, więc zalecają HTTPS po prostu, aby nie musieli dokumentować ssh-agent? Słusznie. Dzięki!
sarnold
74
@sarnold Prawdopodobnie ma to więcej wspólnego z ilością pytań związanych z ssh-agent i zarządzaniem kluczem publicznym oraz liczbą korporacyjnych zapór ogniowych, które pozwalają na wychodzące HTTP / HTTPS, ale nie SSH.
Todd A. Jacobs
7
Myślę, że https ułatwia ludziom rozpoczęcie działalności, ponieważ nie musisz robić całego biznesu generowania / kopiowania / wklejania klucza ssh. Z punktu widzenia Githuba może to być postrzegane jako bardziej bezpieczne, ponieważ osoba atakująca, która dostała twoje hasło ssh (lub znalazła otwarty terminal komputerowy), nadal musiałaby znać twoje hasło Github, aby cokolwiek przekazać.
k107
4
@kristi Jeśli atakujący znajdzie ten terminal przed wygaśnięciem pamięci podręcznej haseł, czy nadal nie będzie w stanie wypchnąć, nawet jeśli nie zna hasła? Pytanie jest takie samo, jeśli używasz ssh-agent, oczywistą różnicą jest to, że musisz wprowadzić hasło klucza ssh zamiast hasła github (i wydaje się, że nie ma oczywistego ustawienia dla wygaśnięcia pamięci podręcznej). Pomysł wprowadzenia hasła github zamiast hasła klucza ssh wydaje się krokiem wstecz, choć niewielkim, ponieważ moc, jaką dają te dwa klucze, jest zbliżona do AFAIK.
Halil Özgür,
8
Myślę, że prawie w całości chodzi o zmniejszenie liczby otrzymywanych zapytań o wsparcie. Przypuszczam, że możesz również argumentować, że skoro i tak musisz wprowadzić hasło przez HTTPS, aby uzyskać dostęp do strony, nie możesz zwiększać bezpieczeństwa za pomocą innego mechanizmu uwierzytelniania (klucze SSH), ale możliwe, że zwiększasz powierzchnię ataku, która może zmniejszyć bezpieczeństwo. Mimo to zarówno HTTPS, jak i SSH powinny być odpowiednio bezpieczne, jeśli są właściwie używane.
Cartroo,
52

Zakładam, że GitHub zaleca HTTPS z kilku powodów

1) Łatwiej jest korzystać z dowolnego miejsca, ponieważ potrzebujesz tylko danych konta (nie wymaga kluczy SSH)

2) HTTPS Jest portem otwartym we wszystkich zaporach ogniowych. SSH nie zawsze jest otwarty jako port do komunikacji z sieciami zewnętrznymi

Repozytorium GitHub jest zatem bardziej powszechnie dostępne przy użyciu HTTPS niż SSH.

Moim zdaniem klucze SSH są warte trochę więcej pracy przy ich tworzeniu

1) Klucze SSH nie zapewniają dostępu do konta GitHub, więc nie można przejąć konta, jeśli klucz zostanie skradziony,

2) Użycie silnego hasła z kluczem SSH ogranicza wszelkie niewłaściwe użycie, nawet jeśli klucz zostanie skradziony

Jeśli dane logowania do konta GitHub (nazwa użytkownika / hasło) zostaną skradzione, hasło GitHub można zmienić, aby zablokować dostęp, a wszystkie udostępnione repozytoria można szybko usunąć.

Jeśli klucz prywatny zostanie skradziony, ktoś może wymusić wypchnięcie pustego repozytorium i wyczyścić całą historię zmian dla każdego repozytorium, które posiadasz, ale nie może niczego zmienić na Twoim koncie GitHub. O wiele łatwiej będzie spróbować odzyskać dane po tym naruszeniu dostępu do konta GitHub.

Preferuję używanie SSH z kluczem chronionym hasłem. Mam inny klucz SSH dla każdego komputera, więc jeśli ten komputer zostanie skradziony lub przejęty, mogę szybko zalogować się do GitHub i usunąć ten klucz, aby zapobiec niechcianemu dostępowi.

SSH można tunelować przez HTTPS, jeśli sieć, w której się znajdujesz, blokuje port SSH.

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

Jeśli używasz HTTPS, zalecam dodanie uwierzytelniania dwuskładnikowego, aby chronić twoje konto, a także repozytoria.

Jeśli używasz HTTPS z narzędziem (np. Edytorem), powinieneś użyć tokena programisty z konta GitHub zamiast buforować nazwę użytkownika i hasło w konfiguracji tego narzędzia.

jr0cket
źródło
3
„chociaż jeśli ktoś zdobędzie Twój klucz prywatny, może wymusić wypchnięcie pustego repozytorium i wymazać historię zmian” - tak (i ​​byłoby okropne), ale piękno rozproszonych baz kodów pozwala nam odzyskać z kimś, kto ma przynajmniej jego kopię.
Cameron
Nie jestem pewien, czy ktoś, kto jest w stanie wymusić wypychanie, odróżnia SSH od HTTPS. Gdybym miał twoją nazwę użytkownika i hasło, równie dobrze mógłbym wymusić push.
Matt Canty
Jeśli masz nazwę użytkownika i hasło, możesz usunąć wszystko (po zmianie hasła i kontaktu e-mail oczywiście). Nie ma potrzeby indywidualnego forsowania każdego repozytorium, jeśli można je po prostu usunąć.
jr0cket
porównujesz hasło z kluczem ssh, podczas gdy połączenie https wymaga specjalnego tokena.
Alexey Sh.
13

Albo źle podajesz, albo github ma inne zalecenia na różnych stronach lub mogą się nauczyć z czasem i zaktualizować swoje reco.

Zdecydowanie zalecamy używanie połączenia SSH podczas interakcji z GitHub. Klucze SSH to sposób na identyfikację zaufanych komputerów, bez angażowania haseł. Poniższe kroki przeprowadzą Cię przez proces generowania klucza SSH, a następnie dodawania klucza publicznego do konta GitHub.

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

Sid Sarasvati
źródło
22
FWIW, ta strona nie zawiera już tekstu „zdecydowanie polecam” cytowanego w tej odpowiedzi.
Scott Isaacs,
Zastosowanie nadal „zalecany” HTTPS w poniższym linku: help.github.com/articles/which-remote-url-should-i-use/... „Klonowanie z HTTPS (zalecane)”
JBE
10

Włączanie połączeń SSH przez HTTPS, jeśli jest on blokowany przez zaporę

Sprawdź, czy SSH przez port HTTPS jest możliwy, uruchom następującą komendę SSH:

$ ssh -T -p 443 [email protected]
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

Jeśli to zadziałało, świetnie! Jeśli nie, może być konieczne skorzystanie z naszego przewodnika rozwiązywania problemów .

Jeśli możesz połączyć się z SSH [email protected]przez port 443 , możesz zastąpić ustawienia SSH, aby zmusić dowolne połączenie z GitHub do uruchomienia przez ten serwer i port.

Aby ustawić to w konfiguracji ssh, edytuj plik o ~/.ssh/configi dodaj tę sekcję:

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

Możesz sprawdzić, czy to działa, ponownie łącząc się z GitHub:

$ ssh -T [email protected]
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.

Od uwierzytelniania do GitHub / Korzystanie z SSH przez port HTTPS

mja
źródło
9

Zobacz także: oficjalny Jakiego zdalnego adresu URL powinienem użyć? odpowiedz na help.github.com.

EDYTOWAĆ:

Wydaje się, że nie trzeba już mieć dostępu do zapisu w publicznym repozytorium, aby użyć adresu URL SSH, co powoduje, że moje oryginalne wyjaśnienie jest nieprawidłowe.

ORYGINALNY:

Najwyraźniej głównym powodem faworyzowania adresów URL HTTPS jest to, że adresy URL SSH nie będą działać z publicznym repozytorium, jeśli nie masz dostępu do zapisu do tego repozytorium.

Jednak użycie adresów URL SSH jest zalecane do wdrażania na serwerach produkcyjnych - przypuszczalnie kontekstem tutaj są usługi takie jak Heroku.

Mark Tye
źródło
1
„Te adresy URL zapewniają dostęp do repozytorium git przez SSH. Aby korzystać z tych adresów URL, musisz mieć dostęp do zapisu do publicznego repozytorium lub jakikolwiek dostęp do prywatnego repozytorium. Te adresy URL nie będą działać z publicznym repozytorium, do którego nie masz dostępu do zapisu " - TO NIE JEST PRAWDA. Każdy może sklonować publiczne repozytorium za pomocą adresu URL SSH, do którego nie ma dostępu do zapisu
Sam
1
@Sam To może już nie być prawda, ale tak było, kiedy odpowiedziałem na pytanie. Zredagowałem swoją odpowiedź, aby odzwierciedlić zmianę.
Mark Tye
W rzeczy samej. Pytanie „W jaki sposób GitHub zaleca HTTPS zamiast SSH” byłoby bezsensowne.
Mark Tye
0

Można argumentować, że używanie klucza SSH do uwierzytelnienia jest mniej bezpieczne, ponieważ zwykle zmieniamy hasło częściej niż generujemy nowe klucze SSH.

Serwery, które ograniczają żywotność, dla której będą honorować dane klucze SSH, mogą pomóc zmusić użytkowników do praktyki okresowego odświeżania kluczy SSH.

benhorgen
źródło
Uznaje się teraz za złą radę, aby użytkownicy okresowo zmieniali hasła. Rządy Zjednoczonego Królestwa: ncsc.gov.uk/articles/problems-forcing-regular-password-expiry
nazerb
-3

Może dlatego, że trudniej jest ukraść hasło z mózgu niż ukraść plik klucza z komputera (przynajmniej o ile wiem, może niektóre substancje już istnieją lub metody, ale jest to nieskończona dyskusja)? A jeśli chronisz klucz hasłem, ponownie używasz hasła i pojawiają się te same problemy (ale niektórzy mogą argumentować, że musisz wykonać więcej pracy, ponieważ musisz zdobyć klucz, a następnie złamać hasło).

Tadej
źródło