Skip to content

Instantly share code, notes, and snippets.

@eduardobape
Last active April 7, 2023 12:14
Show Gist options
  • Save eduardobape/28845af1806ac6f58871793dfbaffca0 to your computer and use it in GitHub Desktop.
Save eduardobape/28845af1806ac6f58871793dfbaffca0 to your computer and use it in GitHub Desktop.
How to configure SSH for Git and Github using a SSH key with a custom name file

Configuración Git y GitHub mediante SSH en Windows

Abrir la consola GitBash

Abrir la consola Git Bash.

Configuración inicial de Git (sólo para un repositorio en concreto)

Navegar hasta el directorio donde se encuentra el repositorio e introducir los siguientes comandos para especificar el nombre y dirección de correo electrónico que se usarán en cada commit:

git config --local user.name "Mi nombre"

git --config --local user.email "your_email@example.com"

Si la dirección de correo electrónico que usas en Github está marcada como privada, debes usar tu dirección de correo noreply de Github en el comando anterior.

Comprobar si tenemos claves SSH almacenadas en nuestro disco duro

  1. Comprobar si existe el directorio ~/.ssh. Crearlo si no existe:

    mkdir ~/.ssh

    Los ficheros con la clave pública y el fichero con la clave privada se almacenan por defecto en el directorio .ssh dentro del directorio raíz del usuario (C:\Users[nombre_usuario_windows])

  2. En caso de que el directorio ~/.ssh exista, debes comprobar si dentro de éste existen claves SSH ya creadas que podamos usar o no con Git.

    Una clave SSH está formada por una clave pública y otra privada, cada una almacenada en un fichero diferente. El fichero con la extensión .pub corresponde a la clave SSH pública y el que no la tiene corresponde a la clave privada.

    Los nombres por defecto de estos ficheros varían según el algoritmo de encriptación usado para generar las claves. Por ejemplo, para el algoritmo RSA, SSH crea dos ficheros con los nombres id_rsa.pub y id_rsa. Para el algoritmo ed25519, SSH crea dos ficheros con los nombres id_ed25519.pub y id_ed25519.

Generar nuevas claves SSH

En caso de que no tengamos ninguna clave SSH creada o queramos crear una nueva, debemos ejecutar este comando:

ssh-keygen -t ed25519 -C "your_email@example.com"

Si la dirección de correo electrónico que usas en Github está marcada como privada, debes usar tu dirección de correo noreply de Github en el comando anterior.

Crear una clave SSH con un nombre personalizado

ssh-keygen creará las claves pública y privada con un nombre de fichero por defecto, por ejemplo, id_rsa y id_rsa.pub. Si al crear tus claves SSH cambias dicho nombre por uno personalizado, deberás realizar una serie de pasos adicionales para que los comandos de Git puedan ejecutarse sin errores.

ℹ Ten en cuenta que los comandos de Git utilizan SSH por debajo para realizar la conexión al repositorio remoto.

Opción 1: A nivel global

Esta opción es útil si todavía no tienes el repositorio local Git creado porque antes quieres clonarlo de un repositorio remoto. En este caso, existe la opción de configurar un parámetro que especifique qué clave SSH privada se usará en las conexiones SSH que los comandos de Git utilizan. Para ello, realiza los siguientes pasos:

  1. Localiza o crea el fichero config dentro de tu directorio .ssh. Una posible ruta en Linux sería ~/.ssh/config.
  2. Crea una conexión SSH a este fichero config añadiendo las siguientes líneas:
Host github_ssh_connection
   HostName github.com
   IdentityFile ~/.ssh/my_custom_private_ssh_key

⚠ La clave SSH especificada en la anterior conexión SSH sólo podrá ser usada para ejecutar comandos Git para un repositorio alojado en Github, debido al dominio especificado en "HostName". Si quisieras usar esa misma clave SSH u otra para un repositorio de Gitlab, deberías crear otra conexión SSH en el fichero config especificando como HostName gitlab.com.

Ahora, cuando quieras ejecutar un comando Git, por ejemplo, para clonar un repositorio, en vez de ejecutar el siguiente comando: git clone git@github.com:user/repo.git deberás ejecutar este otro: git clone git@github_ssh_connection:user/repo.git

Como puedes comprobar se ha sustituido la parte del comando que indica el dominio de Github "github.com" por "github_ssh_connection", que es el nombre del Host usado en el fichero config anterior.

En realidad, esta manera de especificar una clave SSH con un nombre personalizado también puede usarse si ya clonaste el repositorio remoto en tu máquina antes de crear la conexión SSH en el fichero ~/.ssh/config. Lo único que tendrías que hacer es actualizar la URL del repositorio remoto asociado a tu repositorio local, usando la conexión SSH creada anteriormente: git remote set-url origin git@github_ssh_connection:user/repo.git

Recuerda que el comando real sería: git remote set-url origin git@github_ssh_connection:user/repo.git En este caso se ha sustituido la parte de "github.com" por el HostName "github_ssh_connection": git remote set-url origin git@github_ssh_connection:user/repo.git

Opción 2: Configuración a nivel de repositorio

Si ya tienes creado tu repositorio Git local antes que el remoto en Github, debes realizar los siguientes pasos para especificar la clave SSH privada que Git usará cuando necesite usar una conexión SSH para comunicarse con tu repositorio remoto:

  1. Accede al directorio donde está almacenado tu repositorio Git local.

  2. Introduce el siguiente comando que sirve para especificar qué clave privada SSH usará Git:

    git config core.sshCommand "ssh -i ~/.ssh/[nombre_fichero_clave_ssh_privada]"

El anterior comando introducirá un nuevo parámetro en el fichero config ubicado dentro del directorio .git de tu repositorio local:

[core]
    sshCommand = ssh -i /path/to/your/private/key

Añadir la clave SSH al ssh-agent

ssh-agent es una herramienta que gestiona las claves SSH que poseemos.

  1. Primero, asegurate que ssh-agent se está ejecutando:

    eval $(ssh-agent -s)

  2. Añade a tu ssh-agent la clave privada que generaste anteriormente con el comando ssh-keygen:

    ssh-add /path/to/your/private/key

Añadir la clave SSH pública a Github

  1. Copiar al portapapeles la clave pública del fichero ~/.ssh/*.pub.

    clip < /path/to/your/public/key

  2. Crea una nueva clave SSH en tu cuenta de GitHub pegando el contenido que hemos copiado al portapapeles en el paso anterior (tu clave pública).

Probar la conexión mediante SSH a GitHub

Introducir el siguiente comando:

ssh -T git@github.com

Aparecerá un mensaje avisando de que la autenticidad del host github.com no puede ser establecida. Le decimos yes para continuar. Si todo ha ido bien, debería aparece un mensaje como éste:

Hi [mi nombre de usuario en GitHub]. You've sucesfully authenticated, but GitHub does not provide shell access.

Cargar automáticamente ssh-agent al iniciar Git Bash

Si deseas que los comandos de Git se ejecuten correctamente y no tengas que introducir el passphrase de tu clave SSH cada vez que Git lo necesite para ejecutar un comando, debes conseguir que ssh-agent se ejecute inmediatamente al iniciar Git Bash. Para ello, es necesario copiar el contenido que se encuentra en las páginas oficial de ayuda de GitHub en uno de estos dos ficheros:

  • ~/.profile
  • ~/bashrc

Si no existe ninguno de estos ficheros, podemos crearlos en la consola de comandos Git Bash o en la consola de comandos de Windows con el siguiente comando: copy > ~/bashrc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment