Warum empfiehlt GitHub HTTPS gegenüber SSH?

334

Auf der GitHub Seite gibt es einen Link ...

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

... und es heißt ...

Wenn Sie sich entschieden haben, die empfohlene HTTPS-Methode nicht zu verwenden, können wir SSH-Schlüssel verwenden, um eine sichere Verbindung zwischen Ihrem Computer und GitHub herzustellen. Die folgenden Schritte führen Sie durch das Generieren eines SSH-Schlüssels und das Hinzufügen des öffentlichen Schlüssels zu Ihrem GitHub-Konto.

Warum ist HTTPS die empfohlene Methode? Gibt es eine Sicherheitslücke in der SSH-Methode oder ist sie langsamer? Ich habe einen SSH-Schlüssel erstellt. Würde dies Sicherheitsbedenken abmildern?

John Livermore
quelle
39
Weniger Konfiguration bedeutet vielleicht einfacher. Außerdem sind auf einigen minderwertigen Betriebssystemen standardmäßig nicht einmal SSH-Clients installiert.
Katspaugh
45
Für zukünftige Benutzer, die diesen Thread finden: GitHub hat seine Richtlinie geändert und sagt nun "Wir empfehlen dringend, bei der Interaktion mit GitHub eine SSH-Verbindung zu verwenden."
Bartlinuxgeek
9
@StevePomeroy, ich glaube nicht, dass die Anweisung "stark empfehlen" an dieser Stelle existiert.
Noel Abrahams
5
@BonsaiOak Früher war es auf der Seite, auf die Steve Pomeroy verlinkt war - web.archive.org/web/20140321204642/https://help.github.com/… - aber es sieht so aus, als hätten sie es seitdem geändert.
Bartlinuxgeek
5
@ br3nt Richtig. Früher haben sie es nicht empfohlen. Dann taten sie es. Dann haben sie es nicht wieder getan. Deshalb ist mein Link zu einer archive.org Seite
beardedlinuxgeek

Antworten:

192

GitHub hat seine Empfehlung mehrmals geändert ( Beispiel ).

Es scheint, dass sie derzeit HTTPS empfehlen, da es am einfachsten in den unterschiedlichsten Netzwerken und Plattformen und von Benutzern eingerichtet werden kann, die mit all dem noch nicht vertraut sind.

Es gibt keinen inhärenten Fehler in SSH (wenn es einen gäbe, würden sie ihn deaktivieren) - in den folgenden Links werden Sie sehen, dass sie auch weiterhin Details zu SSH-Verbindungen enthalten:

  1. Es ist weniger wahrscheinlich, dass HTTPS von einer Firewall blockiert wird.

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

    Die https: // Klon-URLs sind in allen öffentlichen und privaten Repositorys verfügbar. Diese URLs funktionieren überall - auch wenn Sie sich hinter einer Firewall oder einem Proxy befinden.

  2. Über eine HTTPS-Verbindung können Sie credential.helperIhr Kennwort zwischenspeichern.

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

    Gut zu wissen: Der Helfer für Anmeldeinformationen funktioniert nur, wenn Sie eine HTTPS-Repo-URL klonen. Wenn Sie stattdessen die SSH-Repo-URL verwenden, werden SSH-Schlüssel zur Authentifizierung verwendet. Obwohl wir dies nicht empfehlen, lesen Sie in diesem Handbuch nach, um Hilfe beim Generieren und Verwenden eines SSH-Schlüssels zu erhalten.

k107
quelle
51
Ah, also empfehlen sie HTTPS einfach, damit sie nicht dokumentieren müssen ssh-agent? Meinetwegen. Vielen Dank!
Sarnold
74
@sarnold Es hat wahrscheinlich mehr mit dem Umfang der Fragen im Zusammenhang mit der Verwaltung von SSH-Agenten und öffentlichen Schlüsseln und der Anzahl der Unternehmensfirewalls zu tun, die ausgehendes HTTP / HTTPS, jedoch nicht SSH zulassen.
Todd A. Jacobs
7
Ich denke, dass https den Leuten den Einstieg erleichtert, da Sie nicht das gesamte Geschäft mit dem Generieren / Kopieren / Einfügen von SSH-Schlüsseln erledigen müssen. Außerdem könnte es aus Githubs Sicht als sicherer angesehen werden, da ein Angreifer, der Ihr SSH-Passwort erhalten hat (oder ein Computerterminal gefunden hat, das Sie offen gelassen haben), Ihr Github-Passwort noch kennen muss, um etwas zu pushen.
K107
4
@kristi Wenn der Angreifer dieses Terminal findet, bevor der Passwort-Cache abläuft, kann er dann nicht trotzdem pushen, selbst wenn er das Passwort nicht kennt? Die Frage ist ungefähr gleich, wenn Sie ssh-agent verwenden. Der offensichtliche Unterschied besteht darin, dass Sie das Kennwort des ssh-Schlüssels anstelle Ihres Github-Kennworts eingeben müssen (und es scheint keine offensichtliche Einstellung für den Cache-Ablauf zu geben). Die Idee, das Github-Passwort anstelle des SSH-Schlüsselpassworts einzugeben, scheint ein Rückschritt zu sein, wenn auch ein kleiner, da die Leistung, die die beiden Schlüssel Ihnen geben, ungefähr dieselbe AFAIK ist.
Halil Özgür
8
Ich denke, es geht fast ausschließlich darum, das Volumen der Supportanfragen zu reduzieren, die sie erhalten. Ich nehme an, Sie könnten auch argumentieren , dass da Sie haben Ihr Passwort über HTTPS trotzdem Zugriff auf die Website eingeben, Sie kann nicht sein Erhöhung der Sicherheit durch einen anderen Authentifizierungsmechanismus (SSH - Schlüssel) verwenden, aber machbar sind Sie die Angriffsfläche zu erhöhen die könnte die Sicherheit verringern . Trotzdem sollten sowohl HTTPS als auch SSH bei ordnungsgemäßer Verwendung ausreichend sicher sein.
Cartroo
52

Ich gehe davon aus, dass HTTPS aus mehreren Gründen von GitHub empfohlen wird

1) Die Verwendung von überall ist einfacher, da Sie nur Ihre Kontodaten benötigen (keine SSH-Schlüssel erforderlich).

2) HTTPS ist ein Port, der in allen Firewalls geöffnet ist. SSH ist nicht immer als Port für die Kommunikation mit externen Netzwerken geöffnet

Ein GitHub-Repository ist daher mit HTTPS universeller zugänglich als mit SSH.

Meiner Ansicht nach sind SSH-Schlüssel die kleine zusätzliche Arbeit wert, um sie zu erstellen

1) SSH-Schlüssel bieten keinen Zugriff auf Ihr GitHub-Konto, sodass Ihr Konto nicht entführt werden kann, wenn Ihr Schlüssel gestohlen wird.

2) Die Verwendung einer starken Schlüsselphrase mit Ihrem SSH-Schlüssel begrenzt jeglichen Missbrauch, selbst wenn Ihr Schlüssel gestohlen wird

Wenn Ihre Anmeldeinformationen für das GitHub-Konto (Benutzername / Passwort) gestohlen werden, kann Ihr GitHub-Passwort geändert werden, um den Zugriff zu blockieren, und alle freigegebenen Repositorys können schnell gelöscht werden.

Wenn ein privater Schlüssel gestohlen wird, kann jemand einen erzwungenen Push eines leeren Repositorys durchführen und den gesamten Änderungsverlauf für jedes Repository löschen, das Sie besitzen, kann jedoch nichts in Ihrem GitHub-Konto ändern. Es ist viel einfacher, die Wiederherstellung nach dieser Verletzung zu versuchen, wenn Sie Zugriff auf Ihr GitHub-Konto haben.

Ich bevorzuge die Verwendung von SSH mit einem passphrasengeschützten Schlüssel. Ich habe für jeden Computer einen anderen SSH-Schlüssel. Wenn dieser Computer gestohlen oder der Schlüssel kompromittiert wird, kann ich mich schnell bei GitHub anmelden und diesen Schlüssel löschen, um unerwünschten Zugriff zu verhindern.

SSH kann über HTTPS getunnelt werden, wenn das Netzwerk, in dem Sie sich befinden, den SSH-Port blockiert.

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

Wenn Sie HTTPS verwenden, würde ich empfehlen, eine Zwei-Faktor-Authentifizierung hinzuzufügen, um Ihr Konto sowie Ihre Repositorys zu schützen.

Wenn Sie HTTPS mit einem Tool (z. B. einem Editor) verwenden, sollten Sie ein Entwicklertoken aus Ihrem GitHub-Konto verwenden, anstatt den Benutzernamen und das Kennwort in dieser Toolkonfiguration zwischenzuspeichern.

jr0cket
quelle
3
"Obwohl jemand, der Ihren privaten Schlüssel erhält, einen erzwungenen Push eines leeren Repositorys durchführen und Ihren Änderungsverlauf löschen kann" - ja (und wäre schrecklich), aber die Schönheit verteilter Codebasen ermöglicht es uns, uns mit jemandem zu erholen, der hat mindestens eine Kopie davon.
Cameron
Ich bin mir nicht sicher, ob jemand, der Push erzwingen kann, ein Unterscheidungsmerkmal zwischen SSH und HTTPS ist. Wenn ich Ihren Benutzernamen und Ihr Passwort hätte, könnte ich gleichermaßen Push erzwingen.
Matt Canty
Wenn Sie einen Benutzernamen und ein Passwort haben, können Sie alles löschen (natürlich nach Änderung des Passworts und des E-Mail-Kontakts). Sie müssen nicht jedes Repository einzeln erzwingen, wenn Sie sie nur löschen können.
jr0cket
Sie vergleichen das Passwort mit dem SSH-Schlüssel, während für die https-Verbindung ein spezielles Token erforderlich ist.
Alexey Sh.
13

Entweder zitieren Sie falsch oder Github hat auf verschiedenen Seiten unterschiedliche Empfehlungen, oder sie haben mit der Zeit gelernt und ihre Empfehlung aktualisiert.

Wir empfehlen dringend, bei der Interaktion mit GitHub eine SSH-Verbindung zu verwenden. SSH-Schlüssel sind eine Möglichkeit, vertrauenswürdige Computer ohne Kennwörter zu identifizieren. Die folgenden Schritte führen Sie durch das Generieren eines SSH-Schlüssels und das Hinzufügen des öffentlichen Schlüssels zu Ihrem GitHub-Konto.

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

Sid Sarasvati
quelle
22
FWIW, diese Seite enthält nicht mehr den in dieser Antwort zitierten "stark empfohlenen" Text.
Scott Isaacs
Verwenden Sie weiterhin "empfohlen" für HTTPS unter folgendem Link: help.github.com/articles/which-remote-url-should-i-use/… "Klonen mit HTTPS-URLs (empfohlen)"
JBE
10

Aktivieren von SSH-Verbindungen über HTTPS, wenn diese von der Firewall blockiert werden

Testen Sie, ob SSH über den HTTPS-Port möglich ist, und führen Sie diesen SSH-Befehl aus:

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

Wenn das funktioniert hat, großartig! Wenn nicht, müssen Sie möglicherweise unsere Anleitung zur Fehlerbehebung befolgen .

Wenn Sie [email protected]über Port 443 SSH-fähig sind, können Sie Ihre SSH-Einstellungen überschreiben, um zu erzwingen, dass eine Verbindung zu GitHub über diesen Server und Port ausgeführt wird.

Um dies in Ihrer SSH-Konfiguration festzulegen, bearbeiten Sie die Datei unter ~/.ssh/configund fügen Sie diesen Abschnitt hinzu:

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

Sie können testen, ob dies funktioniert, indem Sie erneut eine Verbindung zu GitHub herstellen:

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

Von der Authentifizierung bei GitHub / Verwendung von SSH über den HTTPS-Port

mja
quelle
9

Siehe auch: die offizielle Welche Remote-URL soll ich verwenden? Antwort auf help.github.com.

BEARBEITEN:

Es scheint, dass es nicht länger erforderlich ist, Schreibzugriff auf ein öffentliches Repo zu haben, um eine SSH-URL zu verwenden, was meine ursprüngliche Erklärung ungültig macht.

ORIGINAL:

Anscheinend ist der Hauptgrund für die Bevorzugung von HTTPS-URLs, dass SSH-URLs mit einem öffentlichen Repo nicht funktionieren, wenn Sie keinen Schreibzugriff auf dieses Repo haben.

Die Verwendung von SSH-URLs für die Bereitstellung auf Produktionsservern wird jedoch empfohlen - vermutlich handelt es sich hier um Dienste wie Heroku.

Mark Tye
quelle
1
"Diese URLs bieten Zugriff auf ein Git-Repository über SSH. Um diese URLs verwenden zu können, müssen Sie über Schreibzugriff auf ein öffentliches Repository oder auf ein privates Repository verfügen. Diese URLs funktionieren nicht mit einem öffentlichen Repository, auf das Sie keinen Schreibzugriff haben " - DAS IST NICHT WAHR. Jeder kann ein öffentliches Repo mit einer SSH-URL klonen, auf die er keinen Schreibzugriff hat
Sam
1
@ Sam Es mag nicht mehr wahr sein, aber es war wahr, als ich die Frage beantwortete. Ich habe meine Antwort bearbeitet, um die Änderung widerzuspiegeln.
Mark Tye
Tatsächlich. Die Frage "Wie empfiehlt GitHub HTTPS gegenüber SSH" wäre unsinnig.
Mark Tye
0

Es ist möglich zu argumentieren, dass die Verwendung des SSH-Schlüssels zur Authentifizierung weniger sicher ist, da wir unser Kennwort in der Regel häufiger ändern als neue SSH-Schlüssel generieren.

Server, die die Lebensdauer begrenzen, für die sie bestimmte SSH-Schlüssel einhalten, können dazu beitragen, Benutzer dazu zu zwingen, SSH-Schlüssel regelmäßig zu aktualisieren.

benhorgen
quelle
Es wird jetzt als schlechter Rat angesehen, Benutzer dazu zu bringen, ihre Passwörter regelmäßig zu ändern. Ansicht der britischen Regierung: ncsc.gov.uk/articles/problems-forcing-regular-password-expiry
nazerb
-3

Vielleicht, weil es schwieriger ist, ein Passwort aus Ihrem Gehirn zu stehlen, als eine Schlüsseldatei von Ihrem Computer zu stehlen (zumindest meines Wissens existieren möglicherweise bereits einige Substanzen oder Methoden, aber dies ist eine unendliche Diskussion)? Und wenn Sie den Schlüssel mit einem Passwort schützen, verwenden Sie erneut ein Passwort und es treten dieselben Probleme auf (einige argumentieren jedoch möglicherweise, dass Sie mehr Arbeit leisten müssen, da Sie den Schlüssel erhalten und dann das Passwort knacken müssen).

Tadej
quelle