El uso de claves SSH es más seguro que las contraseñas, y eso además se aplica a Git. A pesar de esto, a diferencia de una contraseña, es más difícil cambiar su clave SSH o administrar varias claves. A pesar de esto, al editar su configuración de SSH, puede conectarse a múltiples repositorios de Git con diferentes claves.
¿Cómo funciona SSH con Git?
Git no solo utiliza su clave privada para autenticarse cuando utiliza SSH en lugar de HTTPS, sino que en realidad establece una conexión SSH real con el servidor remoto. Lo hace en silencio, por lo que es factible que no se dé cuenta de los comandos que está ejecutando, pero utiliza ssh
bajo el capó.
Debido a que utiliza tu predeterminado ssh
comando, actuará como si lo acabara de ejecutar usted mismo, y usará su clave predeterminada en ~/.ssh/id_rsa
. Probablemente esto no sea lo que desea si está leyendo esto, por lo que para cambiarlo, deberá editar la configuración de SSH, no la de Git.
Hacer una nueva clave SSH
Necesitará uno para hacer esto en primer lugar, y hacerlo es bastante sencillo. Simplemente corre ssh-keygen
y especifique un nuevo nombre de clave con el -f
bandera. Esto creará una clave privada y una clave pública con la .pub
extensión.
ssh-keygen -t rsa -f ~/.ssh/github
Editando ~ / .ssh / config
El archivo de configuración de SSH posibilita configurar «Hosts» que coincidirán en función de lo que se está conectando y permitir la modificación del archivo que ssh
usos.
Host github Hostname github.com IdentityFile ~/.ssh/id_rsa.github IdentitiesOnly yes
Esto le permitirá usar una clave SSH distinto a la principal para todas las solicitudes que vayan a github.com
, pero ¿qué sucede si desea utilizar dos claves diferentes para repositorios de Git separados? A modo de ejemplo, uno para su cuenta de trabajo y otro para su cuenta personal.
Bueno, necesitará establecer dos configuraciones con diferentes nombres, usando el mismo host:
Host personal Hostname github.com IdentityFile ~/.ssh/githubpersonal IdentitiesOnly yes Host work Hostname github.com IdentityFile ~/.ssh/githubwork IdentitiesOnly yes
Por lo general, esto daría como consecuencia una configuración conflictiva, pero Git proporciona una forma de evitar esto. Si tiene un repositorio remoto como Github vinculado con su repositorio local, elimínelo:
git remote remove origin
Entonces, en lugar de agregar github.com
como remoto, reemplácelo con el nombre del Host en el archivo de configuración SSH. Git reconocerá esto y usará este host SSH para conectarse. Puede configurar hosts separados por repositorio.
git remote add origin git@personal:username/repository.git
Anulación manual
Si no desea meterse con la configuración de SSH, o simplemente desea anularla temporalmente, Git además proporciona la GIT_SSH_COMMAND
Variable ambiental. Usted puede
GIT_SSH_COMMAND='ssh -i ~/.ssh/github -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Cualquier comando de Git que ejecute posteriormente en la misma sesión de shell usará ese comando SSH en lugar del predeterminado. Además puede configurar un binario SSH totalmente distinto con GIT_SSH
.