Por que o GitHub recomenda HTTPS sobre SSH?

334

No site do GitHub, há um link ...

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

... e afirma ...

Se você decidiu não usar o método HTTPS recomendado, podemos usar as chaves SSH para estabelecer uma conexão segura entre o seu computador e o GitHub. As etapas abaixo orientarão você na geração de uma chave SSH e na adição da chave pública à sua conta do GitHub.

Por que HTTPS é o método recomendado? Existe algum tipo de falha de segurança no método SSH ou é mais lento? Eu criei uma chave SSH. Isso mitigaria quaisquer problemas de segurança?

John Livermore
fonte
39
Menos configuração significa mais fácil, talvez. Além disso, alguns sistemas operacionais inferiores nem têm clientes SSH instalados por padrão.
katspaugh
45
Para futuros usuários que encontrarem este segmento: O GitHub mudou sua política e agora diz "Recomendamos enfaticamente o uso de uma conexão SSH ao interagir com o GitHub".
beardedlinuxgeek
9
@StevePomeroy, não acho que a declaração "recomendo fortemente" exista nesse local.
21928 Noel Abrahams
5
@BonsaiOak Costumava estar na página de Steve Pomeroy vinculada a - web.archive.org/web/20140321204642/https://help.github.com/… - mas parece que eles mudaram desde então.
Beardedlinuxgeek
5
@ br3nt Certo. Eles costumavam não recomendar. Então eles fizeram. Então eles não fizeram novamente. É por isso que o meu link é para uma página archive.org
beardedlinuxgeek

Respostas:

192

O GitHub mudou sua recomendação várias vezes ( exemplo ).

Parece que atualmente eles recomendam HTTPS porque é o mais fácil de configurar na maior variedade de redes e plataformas e por usuários que são novos em tudo isso.

Não há falha inerente no SSH (se houver, eles o desativariam) - nos links abaixo, você verá que eles ainda fornecem detalhes sobre as conexões SSH:

  1. É menos provável que o HTTPS seja bloqueado por um firewall.

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

    Os URLs https: // clone estão disponíveis em todos os repositórios, públicos e privados. Esses URLs funcionam em qualquer lugar - mesmo se você estiver protegido por um firewall ou proxy.

  2. Uma conexão HTTPS permite credential.helperarmazenar em cache sua senha.

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

    É bom saber: o auxiliar de credencial funciona apenas quando você clona um URL de reporte HTTPS. Se você usar o URL do repositório SSH, as chaves SSH serão usadas para autenticação. Embora não o recomendamos, se você deseja usar esse método, consulte este guia para obter ajuda na geração e uso de uma chave SSH.

k107
fonte
52
Ah, então eles recomendam HTTPS simplesmente para não precisar documentar ssh-agent? Justo. Obrigado!
sarnold
74
@sarnold Provavelmente, isso tem mais a ver com o volume de perguntas relacionadas ao gerenciamento de ssh-agent e de chave pública e ao número de firewalls corporativos que permitem HTTP / HTTPS de saída, mas não SSH.
Todd A. Jacobs
7
Acho que o https facilita o início das pessoas, pois você não precisa gerar todo o negócio de chaves ssh para gerar / copiar / colar. Também poderia ser visto como mais seguro da perspectiva do Github, já que um invasor que obteve sua senha ssh (ou encontrou um terminal de computador que você deixou aberto) ainda precisaria saber sua senha do Github para enviar qualquer coisa.
K107
4
@kristi Se o invasor encontrar esse terminal antes que o cache de senhas expire, ele ainda não conseguirá pressionar, mesmo que não saiba a senha? A questão é a mesma se você usar o ssh-agent, a diferença óbvia é que você deve digitar a senha da chave ssh em vez da senha do github (e não parece haver uma configuração óbvia para a expiração do cache). A idéia de digitar a senha do github em vez da senha da chave ssh parece um passo atrás, embora pequena, já que o poder que as duas teclas fornecem é quase o mesmo AFAIK.
Halil Özgür
8
Eu acho que é quase inteiramente sobre reduzir o volume de consultas de suporte que elas recebem. Suponho que você também possa argumentar que, desde que você tenha que digitar sua senha por HTTPS de qualquer maneira para acessar o site, não poderá aumentar a segurança usando um mecanismo de autenticação diferente (chaves SSH), mas é possível aumentar a superfície de ataque que pode diminuir a segurança. Ainda, HTTPS e SSH devem ser adequadamente seguros se usados ​​corretamente.
Cartroo
52

Presumo que o HTTPS seja recomendado pelo GitHub por vários motivos

1) É mais simples de usar de qualquer lugar, pois você só precisa dos detalhes da sua conta (não são necessárias chaves SSH)

2) HTTPS É uma porta aberta em todos os firewalls. O SSH nem sempre é aberto como uma porta para comunicação com redes externas

Um repositório GitHub é, portanto, mais universalmente acessível usando HTTPS que SSH.

Na minha opinião, as chaves SSH valem o pouco trabalho extra em criá-las

1) As chaves SSH não fornecem acesso à sua conta do GitHub; portanto, sua conta não pode ser invadida se sua chave for roubada,

2) O uso de uma frase-chave forte com sua chave SSH limita qualquer uso indevido, mesmo que sua chave seja roubada

Se as credenciais da sua conta do GitHub (nome de usuário / senha) forem roubadas, sua senha do GitHub poderá ser alterada para impedir seu acesso e todos os seus repositórios compartilhados poderão ser excluídos rapidamente.

Se uma chave privada é roubada, alguém pode fazer um push forçado de um repositório vazio e apagar todo o histórico de alterações de cada repositório que você possui, mas não pode mudar nada na sua conta do GitHub. Será muito mais fácil tentar recuperar essa violação de acesso à sua conta do GitHub.

Minha preferência é usar o SSH com uma chave protegida por senha. Eu tenho uma chave SSH diferente para cada computador; portanto, se essa máquina for roubada ou comprometida com a chave, eu posso entrar rapidamente no GitHub e excluir essa chave para impedir o acesso indesejado.

O SSH pode ser encapsulado por HTTPS se a rede em que você estiver bloquear a porta SSH.

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

Se você usa HTTPS, recomendo adicionar autenticação de dois fatores para proteger sua conta e seus repositórios.

Se você usa HTTPS com uma ferramenta (por exemplo, um editor), deve usar um token de desenvolvedor da sua conta do GitHub em vez de armazenar em cache o nome de usuário e a senha na configuração dessa ferramenta.

jr0cket
fonte
3
"embora se alguém se apossar da sua chave privada, ele poderá pressionar um repositório vazio e eliminar seu histórico de alterações" - sim (e seria horrível), mas a beleza das bases de código distribuídas nos permite recuperar com alguém que tem pelo menos uma cópia.
Cameron
Não tenho certeza de afirmar que alguém ser capaz de forçar push é um diferenciador entre SSH e HTTPS. Se eu tivesse seu nome de usuário e senha, também poderia forçar o envio.
quer
Se você tiver nome de usuário e senha, poderá excluir tudo (depois de alterar a senha e o e-mail, é claro). Não há necessidade de fazer força individual em cada repositório, se você puder excluí-los.
Jr0cket 5/07
você está comparando senha vs chave ssh enquanto a conexão https requer um token especial.
Alexey Sh.
13

Você está citando errado ou o Github tem recomendações diferentes em páginas diferentes, ou eles podem aprender com o tempo e atualizar suas atualizações.

É altamente recomendável usar uma conexão SSH ao interagir com o GitHub. As chaves SSH são uma maneira de identificar computadores confiáveis, sem envolver senhas. As etapas abaixo orientarão você na geração de uma chave SSH e na adição da chave pública à sua conta do GitHub.

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

Sid Sarasvati
fonte
22
FWIW, esta página não contém mais o texto "recomendo vivamente" citado nesta resposta.
9309 Scott Isacs
O uso ainda "recomendado" para HTTPS no seguinte link: help.github.com/articles/which-remote-url-should-i-use/… "Clonagem com URLs HTTPS (recomendado)"
JBE
10

Habilitando conexões SSH por HTTPS se estiver bloqueado pelo firewall

Teste se o SSH pela porta HTTPS é possível, execute este comando SSH:

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

Se isso funcionou, ótimo! Caso contrário, talvez seja necessário seguir nosso guia de solução de problemas .

Se você conseguir fazer o SSH [email protected]pela porta 443 , poderá substituir as configurações do SSH para forçar qualquer conexão com o GitHub a ser executada por esse servidor e porta.

Para definir isso na sua configuração ssh, edite o arquivo em ~/.ssh/confige adicione esta seção:

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

Você pode testar se isso funciona conectando mais uma vez ao GitHub:

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

De autenticação para GitHub / usando SSH pela porta HTTPS

mja
fonte
9

Veja também: o oficial Qual URL remoto devo usar? responda em help.github.com.

EDITAR:

Parece que não é mais necessário ter acesso de gravação a um repositório público para usar um URL SSH, invalidando minha explicação original.

ORIGINAL:

Aparentemente, o principal motivo para favorecer os URLs HTTPS é que os URLs SSH não funcionarão com um repositório público se você não tiver acesso de gravação a esse repositório.

No entanto, o uso de URLs SSH é recomendado para implantação em servidores de produção - presumivelmente o contexto aqui são serviços como o Heroku.

Mark Tye
fonte
1
"Esses URLs fornecem acesso a um repositório git sobre SSH. Para usar esses URLs, você deve ter acesso de gravação a um repositório público ou qualquer acesso a um repositório privado. Esses URLs não funcionarão com um repositório público ao qual você não tem acesso de gravação. " - ISSO NÃO É VERDADE. Qualquer um pode clonar um repositório público com um SSH url eles não têm acesso de gravação para
Sam
1
@ Sam Pode não ser mais verdade, mas era verdade quando respondi à pergunta. Eu editei minha resposta para refletir a alteração.
Mark Tye
De fato. A pergunta "Como o GitHub recomenda HTTPS sobre SSH" não faria sentido.
Mark Tye
0

É possível argumentar que o uso da chave SSHs para autenticação é menos seguro, porque tendemos a alterar nossa senha mais periodicamente do que geramos novas chaves SSH.

Os servidores que limitam a vida útil a que serão respeitados, dadas as chaves SSH, podem ajudar a forçar os usuários a praticar a atualização periódica das chaves SSH.

benhorgen
fonte
Agora, é considerado um mau conselho fazer com que os usuários alterem suas senhas periodicamente. Os governos do Reino Unido ver: ncsc.gov.uk/articles/problems-forcing-regular-password-expiry
nazerb
-3

Talvez porque seja mais difícil roubar uma senha do seu cérebro do que roubar um arquivo de chave do seu computador (pelo menos que eu saiba, talvez algumas substâncias ou métodos já existam, mas essa é uma discussão infinita)? E se você proteger com senha a chave, estará usando uma senha novamente e os mesmos problemas surgirão (mas alguns podem argumentar que você precisa trabalhar mais, porque você precisa obter a chave e depois quebrar a senha).

Tadej
fonte