Objetivos de aprendizaje
Después de leer este artículo podrás:
- Entender cómo te autentica un par de claves pública y privada
- Generar una clave Ed25519 con passphrase en Linux, macOS o Windows
- Registrar la clave en GitHub, probar la conexión y evitar filtraciones
En esta página
- ¿Cómo funciona una clave SSH?
- ¿Cómo se genera una clave SSH?
- ¿Cómo usar ssh-agent para no escribir la passphrase a cada rato?
- ¿Cómo se registra la clave pública en GitHub?
- ¿Cómo compruebas que funcionó?
- ¿Cuáles son los errores más comunes?
- ¿Cómo proteges tu clave privada?
- Cómo hacerlo en Square Cloud
- Preguntas frecuentes
SSH (Secure Shell) es el protocolo que usas para entrar en servidores y para hacer git push sin escribir usuario y contraseña cada vez. En lugar de una contraseña, puede autenticarte con un par de claves criptográficas.
Este modelo es más seguro que una contraseña por una razón sencilla: el secreto nunca viaja por la red.
¿Cómo funciona una clave SSH?#
Generas dos archivos vinculados matemáticamente:
- Clave privada (por ejemplo
id_ed25519): se queda solo en tu máquina. Es el secreto. - Clave pública (
id_ed25519.pub): se puede copiar a cualquier lugar. Queda en el servidor o en tu cuenta de GitHub.
Al conectar, el servidor envía un desafío. Tu cliente SSH firma el desafío con la clave privada, y el servidor comprueba la firma con la pública. Si coincide, entras. La clave privada en sí nunca se envía.
Quien tiene solo la clave pública no puede hacerse pasar por ti. Quien tiene la privada sí, así que trátala con el mismo cuidado que la contraseña del banco.
¿Cómo se genera una clave SSH?#
El comando es el mismo en Linux, macOS y Windows (PowerShell o Git Bash):
ssh-keygen -t ed25519 -C "tu@ejemplo.com"-t ed25519elige el tipo.-Cañade un comentario (usa el correo de tu cuenta de GitHub).
El programa pregunta dónde guardarla: presiona Enter para aceptar la ruta por defecto (~/.ssh/id_ed25519). Después pide una passphrase. Define una. La passphrase cifra el archivo de la clave privada: si alguien copia el archivo, aún necesita la frase.
Al final hay dos archivos en ~/.ssh/: id_ed25519 (privada) e id_ed25519.pub (pública).
¿Qué tipo de clave conviene usar?#
En la mayoría de los casos, Ed25519. Es el tipo que la documentación de GitHub usa por defecto en sus ejemplos.
Si el sistema o un servidor antiguo no acepta Ed25519, usa RSA de 4096 bits:
ssh-keygen -t rsa -b 4096 -C "tu@ejemplo.com"¿Cómo usar ssh-agent para no escribir la passphrase a cada rato?#
ssh-agent guarda la clave desbloqueada en memoria durante la sesión.
En Linux y macOS:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519En macOS, para guardar la passphrase en el Llavero, usa ssh-add --apple-use-keychain ~/.ssh/id_ed25519 y crea el archivo ~/.ssh/config con:
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519En Windows, abre PowerShell como administrador y activa el servicio:
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service ssh-agentDespués, en una terminal sin privilegios de administrador:
ssh-add c:/Users/TU_USUARIO/.ssh/id_ed25519¿Cómo se registra la clave pública en GitHub?#
- Copia el contenido del archivo
.pub, sin espacios ni saltos de línea de más:- macOS:
pbcopy < ~/.ssh/id_ed25519.pub - Windows (PowerShell):
cat ~/.ssh/id_ed25519.pub | clip - Linux:
cat ~/.ssh/id_ed25519.puby copia la salida.
- macOS:
- En GitHub, haz clic en tu foto de perfil y luego en Settings.
- En la barra lateral, en Access, abre SSH and GPG keys.
- Haz clic en New SSH key, ponle un título (por ejemplo "laptop personal"), elige el tipo Authentication y pega la clave.
- Haz clic en Add SSH key. GitHub puede pedirte que confirmes tu identidad.
En servidores propios, el paso equivalente es añadir la línea de la clave pública al archivo ~/.ssh/authorized_keys del usuario en el servidor.
¿Cómo compruebas que funcionó?#
ssh -T git@github.comEn la primera conexión, SSH muestra una huella (fingerprint) y pregunta Are you sure you want to continue connecting (yes/no)?. Compara la huella con la página oficial de fingerprints de GitHub antes de escribir yes. Si todo está bien, la respuesta es:
Hi TU_USUARIO! You've successfully authenticated, but GitHub does not provide shell access.El mensaje habla de "sin acceso a shell" porque GitHub solo acepta comandos de Git. El comando termina con código 1, y eso es lo esperado.
Para clonar por SSH, usa una URL con el formato git@github.com:usuario/repositorio.git.
¿Cuáles son los errores más comunes?#
Permission denied (publickey): el servidor no reconoció ninguna clave. Comprueba que la pública esté registrada en la cuenta correcta, que la privada se haya añadido al agente (ssh-add -l lista las claves cargadas) y que la URL del remoto use git@github.com:, no https://.
Windows no usa la clave cargada en el agente: Git puede estar usando otro binario de SSH, no el del sistema. Obliga a Git a usar el cliente de Windows, donde el agente guarda la clave:
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"Bad configuration option: usekeychain en macOS: añade IgnoreUnknown UseKeychain al mismo bloque Host del archivo ~/.ssh/config.
¿Cómo proteges tu clave privada?#
- Nunca subas la clave privada a un repositorio, chat o ticket. Si ocurre, trátala como filtrada: elimina la pública correspondiente de GitHub y genera otro par. La guía sobre una clave de API expuesta en GitHub sigue la misma lógica de revocación.
- Usa una passphrase y una clave por máquina. Así, perder una laptop invalida solo una clave.
- Dale un título claro a cada clave en GitHub y borra las que ya no uses.
- Para automatizaciones como el deploy con GitHub Actions, usa credenciales guardadas como secrets, nunca tu clave personal.
- Repasa la checklist de seguridad para publicar un bot, sitio o API.
Cómo hacerlo en Square Cloud#
En Square Cloud no necesitas una clave SSH para hacer deploy. Las formas de deploy son subir un ZIP en el panel, la CLI, GitHub (un push hace deploy, con la GitHub Action oficial o un webhook) y la extensión de VS Code. La CLI inicia sesión aprobando un código en el navegador o, en CI, lee la clave de la variable SQUARECLOUD_API_KEY.
No se permiten conexiones salientes por el puerto 22, así que la aplicación no puede abrir SSH hacia otro servidor ni clonar un repositorio por git@. Para acceder a un repositorio privado, usa HTTPS con un token. Guarda ese token, y cualquier otro secreto, en las variables de entorno de la aplicación (en el panel, la API, la CLI o VS Code), nunca en el código ni en el ZIP. El cambio se aplica en el siguiente reinicio, sin rebuild.
Mira cómo configurarlas en variables de entorno en Square Cloud.
Infraestructura
Mitigación de DDoS L3/L4/L7 y WAF en todos los planes
Preguntas frecuentes
¿Qué diferencia hay entre la clave pública y la clave privada?
La pública se puede compartir y queda en el servidor o en GitHub. La privada nunca sale de tu máquina: demuestra que eres el dueño de la pública.
Ed25519 o RSA: ¿cuál elijo?
Ed25519 es el tipo que la documentación de GitHub usa por defecto en sus ejemplos. Usa RSA de 4096 bits solo si el sistema no acepta Ed25519.
¿Necesito una passphrase en la clave?
Es lo recomendable. Protege el archivo de la clave privada si alguien lo copia de tu computadora, y ssh-agent la recuerda para que no la escribas en cada uso.
Perdí la clave privada. ¿Y ahora?
No hay forma de recuperarla. Genera un par nuevo, registra la nueva clave pública y elimina la antigua de GitHub o del servidor.
Más en Seguridad
Ver los 10 artículos- Hackearon mi aplicación: qué hacer ahoraSi hackearon tu aplicación, contén el acceso, cambia todos los secretos y conserva los logs antes de limpiar. El orden correcto, cómo hallar la causa y cómo volver.
- Checklist de seguridad para publicar un bot, sitio o APIChecklist de seguridad antes de publicar un bot, sitio o API: secretos en variables de entorno, dependencias, HTTPS, cabeceras, permisos mínimos y logs.
- Cómo proteger tu web contra DDoSPara protegerte de un DDoS, combina mitigación en el borde (CDN y WAF) con límite de peticiones, timeouts y caché en la aplicación. Guía paso a paso con código.
- Clave de API expuesta en GitHub: cómo revocarla y prevenirlo¿Subiste una clave de API a GitHub? Revócala primero, luego limpia el historial y cambia el valor. Mira el paso a paso y cómo evitar que se repita.