Como obtenho o git como padrão para ssh e não https para novos repositórios


206

Hoje em dia, quando crio um novo repositório no GitHub na página de configuração, recebo:

git remote add origin https://github.com/nikhilbhardwaj/abc.git
git push -u origin master

E sempre que preciso enviar um commit, preciso digitar meu nome de usuário e senha do GitHub.

Eu posso mudar isso manualmente para

git@github.com:nikhilbhardwaj/abc.git

no .git/config. Acho isso bastante irritante - existe alguma maneira de configurar o git para usar o SSH por padrão?


Acho que a resposta do @ MoOx provavelmente é mais consistente com o que você está procurando. O insteadOftruque existe desde pelo menos 2012. Veja também Como converter git:URLs em http:URLs .
JWW

Respostas:


300

Configurar a ramificação de origem de um repositório para ser SSH

A página de configuração do repositório do GitHub é apenas uma lista sugerida de comandos (e o GitHub agora sugere o uso do protocolo HTTPS). A menos que você tenha acesso administrativo ao site do GitHub, não conheço nenhuma maneira de alterar os comandos sugeridos.

Se você preferir usar o protocolo SSH, basta adicionar um ramo remoto como este (por exemplo, use este comando no lugar do comando sugerido pelo GitHub). Para modificar uma ramificação existente, consulte a próxima seção.

$ git remote add origin git@github.com:nikhilbhardwaj/abc.git

Modificar um repositório pré-existente

Como você já sabe, para alternar um repositório pré-existente para usar SSH em vez de HTTPS, você pode alterar o URL remoto dentro do seu .git/configarquivo.

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    -url = https://github.com/nikhilbhardwaj/abc.git
    +url = git@github.com:nikhilbhardwaj/abc.git

Um atalho é usar o set-urlcomando:

$ git remote set-url origin git@github.com:nikhilbhardwaj/abc.git

Mais informações sobre o comutador SSH-HTTPS


Obrigado, eu não sabia que eles tornavam o https inteligente o padrão.
Nikhil

3
Isso pode ser bom para usuários do Windows, mas no Linux era um passo atrás: o ssh sempre funcionava e o novo cache de senha do Smart HTTPS funciona apenas no Windows. Há uma nota sobre "Onde está a versão do Mac?" mas nem uma única palavra para usuários do linux.
MestreLion 14/09/12

Devo acrescentar que, esse método não interfere no cliente mac do github. Altere-o e você poderá usar a linha de comando e a versão da GUI (cliente do github) do git sem problemas.
Kemal Dağ

1
Mais uma vez set-urlme ajude! Muito obrigado !
guozqzzu

183
  • GitHub

    git config --global url.ssh://git@github.com/.insteadOf https://github.com/
    
  • BitBucket

    git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/
    

Isso diz ao git para sempre usar o SSH em vez do HTTPS ao se conectar ao GitHub / BitBucket, para que você se autentique por certificado por padrão, em vez de ser solicitada uma senha.


4
Se alguém quiser pesquisar isso na documentação , procure url.<base>.insteadOf.

2
ser cauteloso isso parece quebrar algumas coisas - Tenho notado algumas funcionalidades de homebrew parou de funcionar depois de ter feito essa mudança (ou seja, a instalação não-padrão versões / ramos)
Prefixo

1
Para gitlab: git configuração --global url.ssh: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
Eu acho que deveria ser git config --global url.ssh: //git@github.com: .insteadDe github.com , porque o github gosta de git@github.com: <USERNAME> / <REPO> .git. (EDIT git config --global url.git@github.com:.insteadOf https://github.com/trabalha em git 2.7.4, com certeza.)
Glen Keane

1
Como um comentário aqui mencionou problemas de produção em casa, pode ser uma boa ideia remover --globale fazer isso em uma base de recompra.
Pylinux

58

A resposta fornecida por Trevor está correta .

Mas aqui está o que você pode adicionar diretamente no seu .gitconfig:

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
  insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/

2
Muito mais simples +1
PiersyP 28/03

-1 para este truque. Também é recomendado pelo pessoal do kernel. Veja também git pull na lista de discussão dos novatos do kernel.
JWW

solução mais limpa muito - e grande para golang projectos onde "ir buscar" o padrão é https e um querer definir individualmente urls para ssh em vez por exemplo, para repos privadas etc.
colm.anseo

1
Para o Gitlab: [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/também existe pushInsteadOfse você deseja afetar o URL de envio, mas não a busca. Pode ser usado git remote -vpara inspecionar URLs eficazes que o git vai usar.
Beni Cherniavsky-Paskin

Isso não funciona, pelo menos para repositórios existentes.
Andrew Koster

4

Você pode ter clonado acidentalmente o repositório em https, em vez de ssh. Eu cometi esse erro várias vezes no github. Certifique-se de copiar o link ssh em primeiro lugar ao clonar, em vez do link https.


Precisa clonar um novo com o link ssh
codenamezero

Você também pode alterar o link de repo de HTTP para SSH, consulte as outras respostas.
Mike Lyons

3

Você precisa clonar no ssh, não em https.

Para isso, você precisa definir suas chaves ssh. Eu preparei este pequeno script que automatiza isso:

#!/usr/bin/env bash
email="$1"
hostname="$2"
hostalias="$hostname"
keypath="$HOME/.ssh/${hostname}_rsa"
ssh-keygen -t rsa -C $email -f $keypath
if [ $? -eq 0 ]; then
cat >> ~/.ssh/config <<EOF
Host $hostalias
        Hostname $hostname *.$hostname
        User git
    IdentitiesOnly yes
        IdentityFile $keypath
EOF
fi

e corra como

bash script.sh myemail@example.com github.com

Alterar seu URL remoto

git remote set-url origin git@github.com:user/foo.git

Adicione conteúdo ~/.ssh/github.com_rsa.pubàs suas chaves ssh no github.com

Verifique a conexão

ssh -T git@github.com

0

Arquivo SSH

~/.ssh/config file
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
    LogLevel QUIET
    ConnectTimeout=10
Host github.com
        User git
        AddKeystoAgent yes
        UseKeychain yes
        Identityfile ~/github_rsa

Editar reponha o nome / .git / config

[remote "origin"]
        url = git@github.com:username/repo.git
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.