El VPS de producción extrae el repositorio mediante una clave de implementación, bien. Excepto que se generó en la computadora portátil del director técnico, se copió en /root/.ssh y se reutilizó para la puesta en escena y la producción. Cuando la preparación se ve comprometida durante un complemento de WordPress vulnerable, el atacante también clona el repositorio API privado: la misma clave, acceso de lectura a todo el monorepo adjunto.
Las claves de implementación son el pasaporte entre su host y Git. Mal cortados, transforman un incidente de aplicación en una filtración de propiedad intelectual.
Implementar clave SSH: alcance mínimo
En GitHub o GitLab: implemente la clave por repositorio, de solo lectura para un servidor que solo extrae el código.
| Enfoque | Ventaja | Riesgo |
|---|---|---|
| Implementar clave de solo lectura | Acceso limitado a un repositorio | Clave duplicada de sobres múltiples |
| Usuario de la máquina PAT | API enriquecida | Alcance demasiado amplio, sin rotación |
| Aplicación OAuth | Centralizado | Complejidad, auditoría |
Cree un usuario deploy de Linux sin inicio de sesión de shell (/usr/sbin/nologin), con ForceCommand si necesita restringirlo a git-shell.
Una clave en el servidor de producción vale lo que vale ese servidor; trátela como un secreto de alto nivel.
CI vs tiempo de ejecución: dos identidades distintas
La canalización de CI (GitHub Actions, GitLab CI) utiliza un token con alcances read_repository o una clave de implementación write solo si automatiza etiquetas y lanzamientos, nunca con derechos de administrador en la organización.
El servidor de producción simplemente extrae el código. El CI construye y promociona el artefacto (imagen, archivo); el servidor no necesariamente clona en cada implementación si entrega imágenes inmutables.
Separar identificadores de compilación y identificadores de implementación limita la cadena de ataque.
Rotación, auditoría e inventario
Mantenga un registro: clave → repositorio → entorno → fecha de creación → próxima rotación. Automatiza una alerta de 90 días.
Procedimiento típico: generar un nuevo par ed25519, agregar la clave pública al host Git en breve coexistencia, validar la implementación en etapa de prueba y luego en producción, revocar la anterior. Después del incidente: revocar inmediatamente, no “el próximo lunes”.
Hosts alternativos y acceso a git
En git compartido sin SSH: implemente a través de FTP o rsync desde CI; no hay clave a largo plazo en alojamiento compartido. En VPS y bare metal: implemente el estándar clave.
Algunas plataformas PaaS (Clever Cloud, etc.) utilizan webhooks: sin clave en la máquina; compruebe quién puede desencadenar una implementación.
Errores comunes
Clave privada comprometida con el repositorio: escanea el historial de git. StrictHostKeyChecking no facilita los ataques MITM: anclar known_hosts. Submódulo privado sin clave de implementación dedicada: el clon principal se realiza correctamente, el submódulo falla o fuerza una clave demasiado grande. Token personal del cliente potencial reutilizado en CI y en el servidor: una sola filtración compromete la construcción y la producción.
La parte superior: solo lectura que lee demasiado
Automatizar sin bloquear significa identidades de máquina cortas, alcance mínimo, rotación documentada, no una clave inmortal en la raíz.
Decide y avanza sin puntos ciegos
Cree una clave de implementación por repositorio y por entorno, un usuario de "implementación" dedicado, identificadores de CI separados, rotación trimestral y una auditoría de "hosts_conocidos". Compare VPS y PaaS con implementación segura a través del directorio y el comparador. Las guías detallan las tuberías.
Realice una auditoría inmediata: enumere las claves Git activas y los repositorios accesibles; elimine los huérfanos.
Preguntas frecuentes
¿Implementar clave o token de CI?
Implementar claves de solo lectura por repositorio para el servidor que extrae el código; Token de CI con alcances mínimos para llamadas API.
¿Por qué prohibir la escritura en una clave de implementación?
Un servidor comprometido con derechos de escritura expone la cadena de suministro; reserva de extracción solo en producción.
¿Cómo rotar sin cortar la producción?
Breve coexistencia de dos claves, validación en puesta en escena y luego revocación de la clave anterior.
¿Solo un usuario de git compartido en el servidor?
Antipatrón: prefiera un usuario de implementación dedicado y una clave por entorno.
Una clave de implementación limpia solo puede clonar un repositorio, no el día después de la puesta en escena comprometida.
