¿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

[email protected]:nikhilbhardwaj/abc.git

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

nikhil
fuente
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 [email protected]: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 = [email protected]:nikhilbhardwaj/abc.git

Un atajo es usar el set-urlcomando:

$ git remote set-url origin [email protected]:nikhilbhardwaj/abc.git

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

David Cain
fuente
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://[email protected]/.insteadOf https://github.com/
    
  • BitBucket

    git config --global url.ssh://[email protected]/.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.

Trevor Austin
fuente
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: //[email protected]/.insteadOf gitlab.com
MoOx
2
Yo creo que debe ser git config --global url.ssh: //[email protected]: .insteadOf github.com , porque le gusta github [email protected]: <nombre de usuario> / <REPO> .git. (EDIT git config --global [email protected]:.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://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
  insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
MoOx
fuente
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://[email protected]/"] 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.

Mike Lyons
fuente
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 [email protected] github.com

Cambia tu URL remota

git remote set-url origin [email protected]:user/foo.git

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

Verifica la conexión

ssh -T [email protected]
rofrol
fuente
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 = [email protected]:username/repo.git
bhargav joshi
fuente