¿Cómo obtengo git por defecto a ssh y no https para nuevos repositorios


206

En estos días, cuando creo un nuevo repositorio en GitHub en la página de configuración, obtengo:

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

Y cada vez que tengo que enviar una confirmación, debo ingresar mi nombre de usuario y contraseña de GitHub.

Puedo cambiar eso manualmente a

git@github.com:nikhilbhardwaj/abc.git

en el .git/config. Esto me parece bastante irritante: ¿hay alguna forma de configurar git para usar SSH de forma predeterminada?


Creo que la respuesta de @ MoOx es probablemente más consistente con lo que estás buscando. El insteadOftruco ha existido desde al menos 2012. También vea Cómo convertir las git:URL en http:URL .
jww

Respuestas:


300

Configurar la rama de origen de un repositorio para que sea SSH

La página de configuración del repositorio de GitHub es solo una lista sugerida de comandos (y GitHub ahora sugiere usar el protocolo HTTPS). A menos que tenga acceso administrativo al sitio de GitHub, no conozco ninguna forma de cambiar sus comandos sugeridos.

Si prefiere usar el protocolo SSH, simplemente agregue una rama remota como esta (es decir, use este comando en lugar del comando sugerido de GitHub). Para modificar una rama existente, consulte la siguiente sección.

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

Modificar un repositorio preexistente

Como ya sabe, para cambiar un repositorio preexistente para usar SSH en lugar de HTTPS, puede cambiar la URL remota dentro de su .git/configarchivo.

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

Un atajo es usar el set-urlcomando:

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

Más información sobre el conmutador SSH-HTTPS


Gracias, no sabía sobre ellos haciendo que https inteligentes sea el predeterminado.
nikhil

3
Esto puede ser bueno para los usuarios de Windows, pero en Linux fue un gran paso atrás: ssh siempre funcionó, y el almacenamiento en caché de la nueva contraseña para Smart HTTPS solo funciona en Windows. Hay una nota sobre "¿Dónde está la versión para Mac?" pero ni una sola palabra para usuarios de Linux.
MestreLion

Debo agregar que, este método no interfiere en absoluto con el cliente mac de github. Cámbielo y puede usar la línea de comandos y la versión gui (cliente de github) de git sin ningún problema.
Kemal Dağ

1
De nuevo set-urlayúdame! Muchas gracias !
guozqzzu

184
  • 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/
    

Eso le dice a git que siempre use SSH en lugar de HTTPS cuando se conecte a GitHub / BitBucket, por lo que se autenticará por certificado de forma predeterminada, en lugar de que se le solicite una contraseña.


44
Si alguien quiere buscar esto en la documentación , busque url.<base>.insteadOf.

2
tenga cuidado, esto parece romper algunas cosas: he notado que algunas funciones de homebrew dejaron de funcionar después de realizar este cambio (es decir, la instalación de versiones / ramas no predeterminadas)
Prefijo

1
Para gitlab: git config --global url.ssh: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
Yo creo que debe ser git config --global url.ssh: //git@github.com: .insteadOf github.com , porque le gusta github git@github.com: <nombre de usuario> / <REPO> .git. (EDIT git config --global url.git@github.com:.insteadOf https://github.com/funciona con seguridad en git 2.7.4.)
Glen Keane

1
Dado que un comentario aquí mencionó problemas de elaboración casera, podría ser una buena idea eliminar --globaly hacer esto en base a un repositorio.
Pylinux

58

La respuesta proporcionada por Trevor es correcta .

Pero esto es lo que puede agregar directamente en su .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
Mucho más simple +1
PiersyP

+1 por este truco. También es recomendado por la gente del núcleo. También vea git pull en la lista de correo de novatos del kernel.
jww

solución más limpia mucho - y grande para golang proyectos en los que "ir a buscar" https por defecto y uno quieren ajustar individualmente las direcciones URL a ssh en lugar de los repos por ejemplo privadas, etc.
colm.anseo

1
Para Gitlab: [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/también existe pushInsteadOfsi desea afectar la URL de inserción pero no recuperar. Se puede usar git remote -vpara inspeccionar URL efectivas que git va a usar.
Beni Cherniavsky-Paskin

Esto no funciona, al menos para los repositorios existentes.
Andrew Koster

4

Es posible que haya clonado accidentalmente el repositorio en https en lugar de ssh. He cometido este error varias veces en github. Asegúrese de copiar el enlace ssh en primer lugar cuando clone, en lugar del enlace https.


Necesito clonar uno nuevo con el enlace ssh
codenamezero

También puede cambiar el enlace de repositorio de HTTP a SSH, consulte las otras respuestas.
Mike Lyons

3

Debe clonar en ssh, no en https.

Para eso necesitas configurar tus claves ssh. He preparado este pequeño script que automatiza esto:

#!/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

y ejecutarlo como

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

Cambia tu URL remota

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

Agregar contenido de ~/.ssh/github.com_rsa.pub a sus claves ssh en github.com

Verifica la conexión

ssh -T git@github.com

0

Archivo 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 nombre del archivo / .git / config

[remote "origin"]
        url = git@github.com:username/repo.git
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.