Conexión SSH con GitHub¶
Para autenticarte contra GitHub (o GitLab y Bitbucket) podés usar dos mecanismos:
- HTTPS con usuario/contraseña o Personal Access Token (PAT).
- SSH con un par de llaves pública/privada.
En esta guía usamos SSH porque:
- Evita tipear credenciales en cada
push/pull. - Permite múltiples identidades en la misma máquina.
- Es estándar de la industria y funciona en cualquier servidor.
Cuidado con equipos compartidos
Generá llaves SSH solo en equipos de tu confianza. En cibercafés, PCs de hoteles o redes públicas, preferí HTTPS con PAT rotativo o autenticación de un solo uso.
1. Por qué Ed25519¶
Hay varios algoritmos para generar llaves SSH. Recomendamos Ed25519 porque:
- Es más rápido que RSA.
- Las llaves son más cortas (más cómodas de manejar).
- Tiene mejor resistencia a algoritmos de factorización cuántica.
Compatibilidad
Ed25519 está soportado por GitHub desde 2017, OpenSSH desde 6.5 (2014) y PuTTY desde 0.68 (2017). Si necesitás compatibilidad con sistemas muy antiguos, podés usar RSA 4096, pero Ed25519 es la opción moderna.
2. Generar la llave SSH¶
Abrí tu terminal y ejecutá:
Git responde:
Generating public/private ed25519 key pair.
Enter a file in which to save the key (~/.ssh/id_ed25519): [Enter]
Apretá Enter para usar la ubicación por defecto. Si ya tenés una
llave en esa ubicación, no la sobreescribas: usá un nombre
distinto (por ejemplo ~/.ssh/id_ed25519_github).
Después te pide una passphrase:
Passphrase, no contraseña
Una passphrase en blanco permite usar la llave sin desbloquearla,
pero si alguien accede a tu archivo puede impersonarte. Con
passphrase, cada uso requiere que la ingreses (o que el
ssh-agent la desbloquee una vez por sesión).
Si ya tenés una llave SSH activa
Antes de generar una nueva, listá las que ya existen:
Si tenés un id_ed25519 o id_rsa que recordás que está
cargada en GitHub, podés saltearte esta sección y pasar a la
siguiente.
3. Agregar la llave al ssh-agent¶
El ssh-agent es un proceso en segundo plano que guarda las llaves
desbloqueadas mientras dura tu sesión. Para que tu llave funcione
"automágicamente", hay que:
macOS trae un ssh-agent integrado. Solo agregá la llave:
El flag --apple-use-keychain guarda la passphrase en el
Keychain del sistema, así no te la pide en cada uso.
Iniciá el agente y agregá la llave:
Para que el agente se inicie automáticamente al abrir la
terminal, agregá esas líneas a tu ~/.bashrc o ~/.zshrc.
Verificar las llaves cargadas
En cualquier sistema:
Lista todas las llaves que el agente tiene desbloqueadas.
4. Subir la llave pública a GitHub¶
Primero copiá el contenido de tu llave pública (no la privada):
Si preferís no usar el portapapeles, abrí el archivo en tu
editor y copiá todo el contenido (incluyendo el comentario
tu.correo@ejemplo.com al final).
Después andá a GitHub:
- Entrá a github.com/settings/ssh/new.
- Title: un nombre descriptivo (por ejemplo "MacBook Pro personal", "PC oficina").
- Key type: Authentication Key.
- Key: pegá el contenido de tu llave pública.
- Clic en Add SSH key.
- Si te pide confirmar, ingresá tu contraseña de GitHub.
Limpiá el portapapeles
Después de pegar la llave pública en GitHub, copiá cualquier otro texto al portapapeles para evitar que la llave quede expuesta si pegás accidentalmente en otro lado.
5. Probar la conexión¶
Para verificar que todo funciona:
La primera vez que te conectás al servidor, Git te pregunta si confiás en el fingerprint del host:
The authenticity of host 'github.com (140.82.121.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Tipeá yes. Si está todo bien, vas a ver:
El warning de shell access es normal
GitHub te autenticó pero no te da acceso por SSH al servidor (no es un servidor interactivo). El mensaje es parte del flujo correcto.
Si ves Permission denied (publickey), volvé a las secciones
anteriores y verificá que:
- El archivo en
~/.ssh/es el público (termina en.pub). - Lo subiste a GitHub correctamente.
- El
ssh-agenttiene la llave privada cargada (ssh-add -l).
6. Cambiar de HTTPS a SSH¶
Si ya tenés repositorios clonados por HTTPS y querés pasarlos a SSH, solo cambiá el remote:
Para verificar:
Deberías ver:
origin git@github.com:novocap/Novocap.Learning.Git.Docs.git (fetch)
origin git@github.com:novocap/Novocap.Learning.Git.Docs.git (push)
7. Múltiples cuentas (avanzado)¶
Si necesitás identificarte con llaves distintas contra la misma
plataforma (por ejemplo, tu cuenta personal y la de tu empresa),
configurás un bloque en ~/.ssh/config:
# Cuenta personal
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
# Cuenta empresa
Host github.com-empresa
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_empresa
Después, en el repositorio:
IncludeIf para config condicional
Si trabajás con muchos repositorios distintos, podés usar
IncludeIf para cargar configs diferentes según el directorio.
Más info en la documentación oficial de OpenSSH.
Próximo paso¶
Con SSH configurado, ya podés pasar a
Fundamentos de Git y GitHub para aprender el flujo
de trabajo con git add, git commit, ramas y Pull Requests.