Usando SSH para la autenticación sin contraseña de GitHub
Ahorre tiempo iniciando sesión en GitHub a través de SSH mediante la autenticación sin contraseña.
La autenticación con GitHub normalmente implica el uso de un token de acceso o una contraseña. Sin embargo, estos métodos pueden resultar inconvenientes e inseguros, especialmente cuando se accede a GitHub desde varios dispositivos.
GitHub ofrece la opción de utilizar Secure Shell (SSH) para la autenticación. SSH presenta un protocolo de red seguro para el acceso remoto a máquinas. Esta característica resulta especialmente valiosa en situaciones que exigen automatización o acceso remoto frecuente.
Comprender la autenticación SSH
La autenticación con SSH implica el uso de claves criptográficas para establecer una conexión segura (túnel) entre un cliente (máquina local) y un servidor (GitHub).
Cuando se utiliza SSH para GitHub, un usuario genera un par de claves SSH: una clave pública y una clave privada. La clave pública se carga en la cuenta de GitHub del usuario, mientras que la clave privada permanece almacenada de forma segura en la máquina local del usuario.
El proceso se puede comparar con el concepto de cerradura y llave. La clave pública (candado) está destinada a compartirse abiertamente y almacenarse de forma segura en el lado del servidor. Sirve como contraparte de la clave privada, lo que permite al servidor verificar la identidad de su máquina local. Por el contrario, la clave privada (clave) actúa como un identificador único almacenado exclusivamente en su máquina local, lo que permite una autenticación exitosa con el servidor.
Durante la autenticación con GitHub, su máquina local presenta su clave privada como prueba de identidad. El servidor verifica si la clave pública correspondiente asociada con su cuenta de GitHub coincide con la clave privada proporcionada. Si las claves coinciden, el servidor otorga acceso, estableciendo una conexión cifrada y segura para la comunicación.
Configurando SSH para GitHub
En esta sección, verá cómo configurar SSH para la autenticación con GitHub.
1. Generación de un par de claves SSH
El proceso de generar un par de claves SSH es el primer paso hacia la utilización de SSH para la autenticación.
- Abra su terminal o símbolo del sistema.
Ejecute el siguiente comando para generar un nuevo par de claves SSH:
ssh-keygen -t rsa -b 4096 -C "youremail@domain.com"
Se le pedirá que ingrese una ubicación de archivo para guardar el par de claves. Presione Entrar para aceptar la ubicación predeterminada (~/.ssh/id_rsa) o especificar una ubicación personalizada.
> Generating public/private rsa key pair. > Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
A continuación, se le solicitará que ingrese una frase de contraseña. Aunque es opcional, agregar una frase de contraseña sirve como un nivel adicional de seguridad. Asegúrese de recordar su frase de contraseña.
> Enter passphrase (empty for no passphrase): > Enter same passphrase again:
Después de generar el par de claves, debería ver dos archivos en la ubicación especificada. id_rsa (clave privada) y id_rsa.pub (clave pública).
> Your identification has been saved in /home/vagrant/.ssh/id_rsa. > Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
- Al finalizar, se muestran la huella digital de las claves y la imagen aleatoria.
Por último, necesitará el contenido de la clave pública para agregarla a GitHub. Ejecute el siguiente comando para obtener el contenido:
cat ~/.ssh/id_rsa.pub
Asegúrese de especificar la ruta (~/.ssh/id_rsa.pub en mi caso) que utilizó al crear las claves.
Copie el contenido en una ubicación segura y temporal para su uso posterior.
2. Agregar la clave pública a GitHub
Ahora que ha generado un par de claves SSH, debe agregar la clave pública a su cuenta de GitHub.
- Inicie sesión en su cuenta de GitHub y vaya a su Configuración de cuenta.
Haga clic en Claves SSH y GPG ubicado en la barra lateral izquierda.
- Haga clic en Nueva clave SSH.
- Asigne un Título a su clave SSH.
Pegue el contenido de la clave pública en el campo Clave.
Finalmente, haga clic en Agregar clave SSH para guardar la clave SSH en su cuenta de GitHub.
Ha exportado exitosamente la clave pública a su cuenta de GitHub con estos.
3. Configurar un agente SSH
Un agente SSH es un programa que ayuda a administrar claves SSH y proporciona una forma segura de almacenarlas y utilizarlas. Actúa como intermediario entre su máquina local y el servidor remoto durante la autenticación SSH. Esto le permite administrar múltiples claves SSH para diferentes cuentas de GitHub.
Asegúrese de que el agente SSH se esté ejecutando.
$ eval "$(ssh-agent -s)" > Agent pid 2757
Agregue la clave privada al agente SSH.
$ ssh-add ~/.ssh/id_rsa > Enter passphrase for /home/vagrant/.ssh/id_rsa: > Identity added: /home/vagrant/.ssh/id_rsa (/home/vagrant/.ssh/id_rsa)
Ha configurado correctamente un agente SSH para administrar sus claves.
4. Prueba de la conexión SSH
Ahora puede probar para verificar que su conexión SSH esté configurada correctamente y puede autenticarse en GitHub usando SSH.
Ejecute el siguiente comando para probar la conexión SSH a GitHub;
ssh -T git@github.com
> The authenticity of host 'github.com (140.92.130.4)' can't be established. > ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM. > Are you sure you want to continue connecting (yes/no)?
Al escribir sí, verá un resultado similar al siguiente.
> Warning: Permanently added 'github.com,140.92.130.4' (ECDSA) to the list of known hosts. > Hi princewillingoo! You've successfully authenticated, but GitHub does not provide shell access.
Esto muestra que la autenticación fue exitosa.
Administrar repositorios con SSH
Configurar SSH le permite administrar sus repositorios sin tener que preocuparse por los problemas de contraseñas y tokens de acceso.
Configuración de URL remota
git remote set-url origin git@github.com:<username>/<repository>.git
Clonar un repositorio
git clone git@github.com:<username>/<repository>.git
Enviar cambios a un repositorio
git push origin <branch>
Extracción de cambios de un repositorio
git pull origin <branch>
Ventajas de SSH sobre la autenticación con contraseña
El uso de SSH para la autenticación ofrece varias ventajas notables sobre los métodos tradicionales de autenticación basados en contraseñas. Esto incluye:
- La autenticación SSH elimina la necesidad de contraseñas, lo que reduce el riesgo de robo de credenciales.
- El uso de claves criptográficas lo hace más inmune a los ataques de fuerza bruta en comparación con las contraseñas.
- Si su clave privada está comprometida, puede revocarla y reemplazarla, haciendo que la clave comprometida sea inútil.
Por este motivo, la autenticación SSH tiende a ser una mejor opción en comparación con la autenticación con contraseña.
Mejores prácticas y solución de problemas
Para garantizar una configuración SSH segura y sin problemas, es necesario seguir las mejores prácticas y estar al tanto de los problemas comunes que pueden ocurrir y las formas de solucionarlos.
- Establezca siempre una frase de contraseña para crear una capa adicional de seguridad.
- Practique copias de seguridad y rotación de claves frecuentes.
- Confirme cada paso para evitar errores de permisos o una configuración incorrecta del agente SSH.
Si sigue estas mejores prácticas, podrá utilizar con confianza la autenticación SSH para GitHub.
La versatilidad de SSH
SSH se utiliza ampliamente en otras áreas para administrar de forma remota servidores, microcontroladores y dispositivos de red, ya que permite un acceso seguro a la interfaz de línea de comandos (CLI), lo que permite a los usuarios realizar diferentes tareas, configurar ajustes, transferir archivos y solucionar problemas.