Perché GitHub consiglia HTTPS su SSH?


334

Sul sito GitHub c'è un link ...

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

... e afferma ...

Se hai deciso di non utilizzare il metodo HTTPS consigliato, possiamo utilizzare le chiavi SSH per stabilire una connessione sicura tra il tuo computer e GitHub. I passaggi seguenti ti guideranno attraverso la generazione di una chiave SSH e quindi l'aggiunta della chiave pubblica al tuo account GitHub.

Perché HTTPS è il metodo raccomandato? C'è una sorta di difetto di sicurezza nel metodo SSH o è più lento? Ho creato una chiave SSH, quindi ciò mitigherebbe eventuali problemi di sicurezza?


39
Meno configurazione significa più facile, forse. Inoltre, alcuni sistemi operativi inferiori non hanno nemmeno client SSH installati per impostazione predefinita.
Katspaugh,

45
A futuri utenti che troveranno questo thread: GitHub ha cambiato la loro politica e ora dice "Si consiglia vivamente di utilizzare una connessione SSH quando si interagisce con GitHub".
beardedlinuxgeek

9
@StevePomeroy, non credo che in quella posizione esista la "raccomandazione vivamente".
Noel Abrahams,

5
@BonsaiOak Un tempo si trovava nella pagina di Steve Pomeroy collegata a - web.archive.org/web/20140321204642/https://help.github.com/… - ma sembra che da allora abbiano cambiato.
beardedlinuxgeek,

5
@ br3nt Giusto. Non lo raccomandavano. Poi hanno fatto. Quindi non lo fecero più. Ecco perché il mio link è a una pagina archive.org
beardedlinuxgeek,

Risposte:


192

GitHub ha modificato più volte la sua raccomandazione ( esempio ).

Sembra che attualmente raccomandino HTTPS perché è il più semplice da configurare sulla più ampia gamma di reti e piattaforme e dagli utenti che non conoscono tutto questo.

Non esiste alcun difetto intrinseco in SSH (se fosse presente lo disabiliterebbero) - nei collegamenti seguenti vedrai che forniscono ancora dettagli anche sulle connessioni SSH:

  1. È meno probabile che HTTPS venga bloccato da un firewall.

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

    Gli URL https: // clone sono disponibili su tutti i repository, pubblici e privati. Questi URL funzionano ovunque, anche se ti trovi dietro un firewall o un proxy.

  2. Una connessione HTTPS consente credential.helperdi memorizzare nella cache la password.

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

    Buono a sapersi: l'helper delle credenziali funziona solo quando si clona un URL repository HTTPS. Se si utilizza invece l'URL repository SSH, le chiavi SSH vengono utilizzate per l'autenticazione. Anche se non lo consigliamo, se si desidera utilizzare questo metodo, consultare questa guida per assistenza nella generazione e utilizzo di una chiave SSH.


52
Ah, quindi raccomandano HTTPS semplicemente in modo da non dover documentare ssh-agent? Giusto. Grazie!
Sarnold,

74
@sarnold Probabilmente ha più a che fare con il volume di domande relative a ssh-agent e la gestione delle chiavi pubbliche e il numero di firewall aziendali che consentono HTTP / HTTPS in uscita ma non SSH.
Todd A. Jacobs,

7
Penso che https renda più facile per le persone iniziare poiché non è necessario eseguire l'intera attività di generazione / copia / incolla di chiavi ssh. Inoltre potrebbe essere visto come più sicuro dal punto di vista di Github poiché un utente malintenzionato che ha ottenuto la tua password ssh (o ha trovato un terminale del computer che hai lasciato aperto) dovrebbe comunque conoscere la tua password Github per inviare qualsiasi cosa.
k107,

4
@kristi Se l'attaccante trova quel terminale prima che scada la cache della password, non sarebbe ancora in grado di spingere anche se non conosce la password? La domanda è la stessa se usi ssh-agent, la differenza evidente è che devi inserire la password della chiave ssh invece della tua password github (e non sembra esserci alcuna impostazione ovvia per la scadenza della cache). L'idea di inserire la password github invece della password della chiave ssh sembra un passo indietro, anche se piccola, poiché la potenza che i due tasti ti danno sono circa lo stesso AFAIK.
Halil Özgür,

8
Penso che si tratti quasi interamente di ridurre il volume delle richieste di supporto che ricevono. Immagino che si potrebbe anche sostenere che dal momento che si deve inserire la password tramite HTTPS comunque accedere al sito web, non si può essere sempre più sicurezza utilizzando un meccanismo di autenticazione diverso (chiavi SSH), ma tenerne tu stai aumentando la superficie di attacco, che potrebbe ridurre la sicurezza. Tuttavia, sia HTTPS che SSH dovrebbero essere adeguatamente sicuri se usati correttamente.
Cartroo,

52

Presumo che HTTPS sia raccomandato da GitHub per diversi motivi

1) È più semplice da usare ovunque, poiché sono necessari solo i dettagli del tuo account (non sono necessarie chiavi SSH)

2) HTTPS È una porta aperta in tutti i firewall. SSH non è sempre aperto come porta per la comunicazione con reti esterne

Un repository GitHub è quindi più universalmente accessibile tramite HTTPS rispetto a SSH.

A mio avviso, le chiavi SSH valgono il piccolo lavoro extra per crearle

1) Le chiavi SSH non forniscono accesso al tuo account GitHub, quindi il tuo account non può essere dirottato se la tua chiave viene rubata,

2) L'uso di una frase chiave forte con la chiave SSH limita qualsiasi uso improprio, anche se la chiave viene rubata

Se le credenziali del tuo account GitHub (nome utente / password) vengono rubate, la password di GitHub può essere modificata per impedirti l'accesso e tutti i tuoi repository condivisi possono essere rapidamente eliminati.

Se viene rubata una chiave privata, qualcuno può fare un push forzato di un repository vuoto e cancellare tutta la cronologia delle modifiche per ogni repository che possiedi, ma non può cambiare nulla nel tuo account GitHub. Sarà molto più facile provare il recupero da questa violazione di te avere accesso al tuo account GitHub.

La mia preferenza è usare SSH con una chiave protetta da passphrase. Ho una chiave SSH diversa per ogni computer, quindi se quella macchina viene rubata o la chiave viene compromessa, posso accedere rapidamente a GitHub ed eliminare quella chiave per impedire l'accesso indesiderato.

SSH può essere tunnelato su HTTPS se la rete su cui ti trovi blocca la porta SSH.

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

Se usi HTTPS, consiglierei di aggiungere l'autenticazione a due fattori, per proteggere il tuo account e i tuoi repository.

Se si utilizza HTTPS con uno strumento (ad esempio un editor), è necessario utilizzare un token sviluppatore dal proprio account GitHub anziché il nome utente e la password della cache nella configurazione di tali strumenti.


3
"anche se qualcuno ottiene la tua chiave privata, può forzare un repository vuoto e cancellare la cronologia delle modifiche" sì (e sarebbe terribile), ma la bellezza delle basi di codice distribuite ci consente di recuperare con qualcuno che ne ha almeno una copia.
Cameron,

Non sono sicuro di affermare che qualcuno in grado di forzare la spinta è un elemento di differenziazione tra SSH e HTTPS. Se avessi il tuo nome utente e password, potrei anche forzare push.
Matt Canty,

Se hai username e password puoi cancellare tutto (dopo aver cambiato la password e il contatto e-mail ovviamente). Non è necessario eseguire forzature individuali su ciascun repository se è possibile eliminarli.
jr0cket,

stai confrontando password vs chiave ssh mentre la connessione https richiede un token speciale.
Alexey Sh.

13

O stai citando qualcosa di sbagliato o github ha raccomandazioni diverse su pagine diverse o possono imparare con il tempo e aggiornare la loro voce.

Si consiglia vivamente di utilizzare una connessione SSH quando si interagisce con GitHub. Le chiavi SSH sono un modo per identificare i computer fidati, senza coinvolgere le password. I passaggi seguenti ti guideranno attraverso la generazione di una chiave SSH e quindi l'aggiunta della chiave pubblica al tuo account GitHub.

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


22
FWIW, questa pagina non contiene più il testo "fortemente raccomandato" citato in questa risposta.
Scott Isaacs,

Utilizzate ancora "consigliato" per HTTPS nel seguente link: help.github.com/articles/which-remote-url-should-i-use/… "Clonazione con URL HTTPS (consigliato)"
JBE

10

Abilitazione delle connessioni SSH su HTTPS se è bloccato dal firewall

Verifica se SSH sulla porta HTTPS è possibile, esegui questo comando SSH:

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

Se ha funzionato, fantastico! In caso contrario, potrebbe essere necessario seguire la nostra guida alla risoluzione dei problemi .

Se si è in grado di SSH git@ssh.github.comsulla porta 443 , è possibile sovrascrivere le impostazioni SSH per forzare qualsiasi connessione a GitHub per l'esecuzione su quel server e quella porta.

Per impostarlo nella tua configurazione ssh, modifica il file in ~/.ssh/confige aggiungi questa sezione:

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

Puoi provare che funziona collegandosi ancora una volta a GitHub:

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

Dall'autenticazione a GitHub / Utilizzo di SSH sulla porta HTTPS


9

Vedi anche: il funzionario Quale URL remoto dovrei usare? rispondere su help.github.com.

MODIFICARE:

Sembra che non sia più necessario avere accesso in scrittura a un repository pubblico per utilizzare un URL SSH, rendendo non valida la mia spiegazione originale.

ORIGINALE:

Apparentemente il motivo principale per favorire gli URL HTTPS è che gli URL SSH non funzioneranno con un repository pubblico se non si ha accesso in scrittura a quel repository.

L'uso di URL SSH è incoraggiato per la distribuzione su server di produzione, tuttavia - presumibilmente il contesto qui è rappresentato da servizi come Heroku.


1
"Questi URL forniscono accesso a un repository git su SSH. Per utilizzare questi URL, devi avere accesso in scrittura a un repository pubblico o qualsiasi accesso a un repository privato. Questi URL non funzioneranno con un repository pubblico a cui non hai accesso in scrittura " - QUESTO NON È VERO. Chiunque può clonare un repository pubblico con un URL SSH a cui non ha accesso in scrittura
Sam

1
@Sam Potrebbe non essere più vero, ma era vero quando ho risposto alla domanda. Ho modificato la mia risposta per riflettere il cambiamento.
Mark Tye,

Infatti. La domanda "In che modo GitHub consiglia HTTPS su SSH" sarebbe priva di senso.
Mark Tye,

0

È possibile sostenere che l'utilizzo della chiave SSH per l'autenticazione sia meno sicuro perché tendiamo a cambiare la nostra password più periodicamente di quanto non generiamo nuove chiavi SSH.

I server che limitano la durata della vita per la quale onoreranno date le chiavi SSH possono aiutare gli utenti a esercitarsi periodicamente nell'aggiornamento delle chiavi SSH.


Ora è considerato un cattivo consiglio far sì che gli utenti cambino periodicamente le password. Vista dei governi del Regno Unito: ncsc.gov.uk/articles/problems-forcing-regular-password-expiry
nazerb

-3

Forse perché è più difficile rubare una password dal tuo cervello quindi rubare un file chiave dal tuo computer (almeno per quanto ne sappia, forse esistono già alcune sostanze o metodi ma questa è una discussione infinita)? E se proteggi la chiave con password, allora stai usando di nuovo una password e sorgono gli stessi problemi (ma alcuni potrebbero sostenere che devi fare più lavoro, perché devi ottenere la chiave e quindi decifrare la password).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.