// DevOps
SSH vs HTTPS en Git: cómo dejar de introducir contraseñas y no perder las claves
Publicado el 20.03.2026
¿Estás cansado de introducir contraseñas o tokens en cada git pull y git push?
¿Copias la llave SSH en cada servidor y temes que la roben o que “se quede” en los logs?
En este artículo veremos cuándo elegir SSH, cuándo HTTPS, cómo configurar el acceso a GitHub / GitLab de forma segura y cómo no convertir tu CI/CD en un cajón de tokens‑contraseñas.
La elección entre SSH y HTTPS no es cuestión de gusto, sino de seguridad y conveniencia para la automatización. Vamos a ver cómo configurar el acceso para que no entorpezca el trabajo.
1. SSH: Llaves y seguridad
SSH (Secure Shell) es el estándar para el trabajo continuo. En lugar de contraseñas se usan pares de llaves. Confirmas tu identidad poseyendo la llave privada, que nunca abandona tu equipo.
Cómo no repartir llaves (SSH Agent)
El principal error es copiar tu llave privada en cada servidor donde necesitas hacer git pull. Eso es un agujero de seguridad. En su lugar utiliza el reenvío de agente (Agent Forwarding).
La idea: Tu equipo local actúa como “guardián” de la llave. Cuando el servidor remoto quiere acceder a GitHub, reenvía la solicitud a tu agente local.
1. Agrega la llave al agente localmente
ssh-add ~/.ssh/id_ed25519
2. Permite el reenvío en ~/.ssh/config
En lugar de escribir ssh -A cada vez, configura la automatización para los hosts necesarios:
Host my-server
HostName 1.2.3.4
User admin
ForwardAgent yes
Ahora, al conectarte a my-server, podrás clonar tus repositorios privados allí, pero la llave en sí no estará en el servidor.
2. Varias cuentas en un mismo dispositivo
Situación frecuente: GitLab del trabajo y GitHub personal. Usar una sola llave para todo es mala práctica. Para que Git elija automáticamente qué llave usar, utiliza alias en ~/.ssh/config.
2.1. Alias en ~/.ssh/config
Ejemplo de configuración:
# GitLab de trabajo
Host gitlab.work
HostName gitlab.company.com
IdentityFile ~/.ssh/id_ed25519_work
# GitHub personal
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_ed25519_personal
Cómo usar esto:
- Al clonar un proyecto del trabajo utiliza el nombre de host del config:
git clone git@gitlab.work:department/project.git - Al trabajar con tu GitHub personal en las direcciones
git remotequedará la estándargit@github.com:user/repo.git.
3. Cuando HTTPS es objetivamente mejor
No descartes HTTPS. Desde que GitHub pasó a Personal Access Tokens (PAT), este protocolo se volvió indispensable en ciertos casos.
3.1. Redes corporativas estrictas
Si los administradores de red han cerrado el puerto 22 (SSH), HTTPS por el puerto estándar 443 es tu salvación.
3.2. Docker y CI/CD
Dentro de contenedores Docker o pipelines temporales es más sencillo pasar un token mediante una variable de entorno que lidiar con la generación y el registro de llaves SSH.
3.3. Tareas puntuales
Si necesitas descargar código rápidamente en un equipo ajeno, es más fácil generar un token temporal en el navegador que dejar rastros en forma de llaves.
3.4. Peligros de https://<TOKEN>@... y alternativas seguras
Usar el token directamente en la URL:
git clone https://<TOKEN>@github.com/username/repo.git
— es una práctica extremadamente insegura: el token puede terminar en:
- el historial del shell (
~/.bash_history); - logs de CI/CD;
- capturas de pantalla y notas.
Mejor así:
- usa
git configconcredential.helper:git config credential.helper store # luego, al primer pedido, ingresa usuario/token - o pasa el token mediante variables de entorno en CI/CD (GitHub Actions, GitLab CI, etc.).
4. Comparación SSH vs HTTPS
| Criterio | SSH | HTTPS |
|---|---|---|
| Facilidad de configuración | Hay que generar una llave, configurar el agente | Más simple: usuario/token o credential.helper |
| Desarrollo continuo | ✅ Ideal: una vez configurado, olvídalo | ✅ Funciona, pero requiere token/usuario |
| Trabajo en servidores | ✅ Mediante reenvío de agente SSH | ❌ No hay agente, se necesita token/contraseña |
| Repositorios públicos | ✅ Lectura sin autorización | ✅ Lectura sin autorización |
| Puerto 22 cerrado | ❌ No funciona | ✅ Funciona a través del puerto 443 |
| CI/CD y builds Docker | ⚠️ Cómodo, pero requiere llaves/SSH‑agent | ✅ Muy cómodo: token mediante variables |
| Tareas puntuales / equipos ajenos | ⚠️ Hay que dejar la llave | ✅ Mejor: token temporal sin llaves |
| Nivel de seguridad (por llaves) | ✅ Las llaves permanecen contigo (agente SSH) | ✅ Seguro, si el token no está en la URL |
Conclusión de la tabla:
- Para tu máquina personal y servidores de confianza — SSH con agente y
~/.ssh/config. - Para CI/CD, builds Docker, redes restringidas y tareas puntuales — HTTPS con tokens, pero sin tokens en la URL.
5. Cómo cambiar de protocolo en un proyecto existente
Si clonaste el proyecto por HTTPS y quieres pasar a SSH (o al revés), no hace falta borrar la carpeta y re-clonar. Simplemente cambia la URL del repositorio remoto.
Cambiar a SSH
git remote set-url origin git@github.com:user/repo.git
Cambiar a HTTPS
git remote set-url origin https://github.com/user/repo.git
Después de eso, todos los siguientes git pull / git push usarán el nuevo protocolo.
Conclusión
Para tu máquina y servidores de confianza elige SSH con agente configurado y ~/.ssh/config: es seguro, cómodo y escalable.
Deja HTTPS para:
- pipelines CI/CD;
- builds Docker;
- condiciones de red restringidas;
- tareas puntuales.
Una combinación adecuada de estos enfoques es una práctica DevOps madura.
Lista de verificación práctica: cómo configurar
Generar llaves SSH:
ssh-keygen -t ed25519 -C "your_email@example.com"Agregar la llave al agente SSH:
ssh-add ~/.ssh/id_ed25519Configurar
~/.ssh/configpara varias cuentas:Host gitlab.work HostName gitlab.company.com IdentityFile ~/.ssh/id_ed25519_work Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519_personalVerificar el acceso:
ssh -T git@gitlab.work ssh -T git@github.comEn CI/CD usar HTTPS con tokens mediante variables de entorno, sin incluirlos en la URL.
// Reviews
Reseñas relacionadas
Hubo varios problemas, tanto en la parte técnica como en la comprensión general. Mijaíl respondió rápido a la solicitud, ayudó a aclarar las cosas y resolvió los problemas técnicos; por ello, muchas gracias. Estoy satisfecho con el resultado.
Hubo varios problemas relacionados tanto con la parte técnica como con la comprensión en general. Mijaíl respondió rápidamente a la solicitud, ayudó a aclarar las cosas y resolvió los problemas técnicos, por lo que le …
Configuración de VPS, configuración del servidor
18.02.2026 · ★ 5/5
Todo se hizo de manera rápida y precisa. Lo recomiendo.
Todo se hizo rápido y con precisión. Lo recomiendo.
Configuración de VPS, configuración del servidor
17.01.2026 · ★ 5/5
Todo salió bien, el profesional respondió rápidamente a las preguntas y ayudó a resolver el problema. ¡Gracias!
Todo fue bien, el profesional respondió rápidamente a las preguntas y ayudó a resolver el problema. ¡Gracias!
Configuración de VPS, configuración del servidor
16.12.2025 · ★ 5/5
Lo hicieron todo con rapidez. Seguiremos acudiendo. ¡Lo recomiendo!
Todo lo hicieron con rapidez. Seguiremos acudiendo. ¡Lo recomiendo!
Configuración de VPS, configuración del servidor
10.12.2025 · ★ 5/5
Hicieron todo rápidamente. Mijaíl siempre está disponible. Seguiremos recurriendo a él.
Todo se hizo con rapidez. Михаил siempre está en contacto. Seguiremos recurriendo a él
Configuración de VPS, configuración del servidor
10.12.2025 · ★ 5/5
¡Mijaíl es un profesional! Ya no es la primera vez que lo demuestra en la práctica.
Михаил, ¡un profesional! Ya lo ha demostrado en la práctica más de una vez.
// Contact
¿Necesitas ayuda?
Escríbeme y te ayudaré a resolver el problema
// Related