SSH y Trabajo Remoto
Claves SSH, tmux, túneles y saltos de bastión: cómo los desarrolladores de Python acceden a las API de staging, siguen los logs de journald y reenvían puertos de bases de datos sin dejar claves sensibles en máquinas compartidas.
Receta
ssh -A -J bastion@jump.acme.com deploy@staging-api.internal
tmux new -s triage
sudo journalctl -u billing-api -fCuándo usar esto:
- Triaje de incidentes en VMs de staging/producción
- Reenvío de puertos de Postgres solo accesible en VPC
- Migración
uv runde larga duración con tmux a prueba de desconexiones - SCP de un paquete o configuración a un host de despliegue aislado
Ejemplo Funcional
# ~/.ssh/config
Host bastion
HostName jump.acme.com
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Host staging-api
HostName 10.0.2.15
User deploy
ProxyJump bastion
LocalForward 15432 staging-db.internal:5432
# Conectar y reenviar DB para psql local
ssh staging-api
# otra terminal:
psql "postgresql://user@localhost:15432/billing"
# La sesión de tmux sobrevive a la suspensión del portátil
tmux new -s migrate
uv run alembic upgrade head
# desvincular: Ctrl-b dLo que esto demuestra:
ProxyJumpa través de un bastión sin doble SSH manualLocalForwardmapea la DB remota a localhost- Sesión con nombre de tmux para migraciones largas
- Archivo de identidad por bloque de host en la configuración
Profundización
Cómo Funciona
- Autenticación SSH - Se prefiere la autenticación por clave; la autenticación por contraseña está deshabilitada en servidores endurecidos.
- Reenvío de agente -
-Areenvía el agente paragit pullen remoto; usar con precaución. - Túneles -
LocalForward(remoto a local),RemoteForward(local a remoto),DynamicForwardSOCKS. - tmux - Multiplexa terminales; las sesiones sobreviven a la conexión SSH.
Lista de Verificación de Trabajo Remoto
| Paso | Comando |
|---|---|
| Probar conexión | ssh -G staging-api configuración en seco |
| Iniciar sesión | tmux new -s work |
| Seguir logs | journalctl -f |
| Copiar artefacto | scp -J bastion file deploy@host:/tmp/ |
Notas de Python
# Comprobación de estado remota en una línea
ssh staging-api 'curl -sf http://localhost:8000/health'
# Sincronizar archivo de entorno de forma segura (evitar si hay secretos en el archivo - usar vault)
scp -J bastion .env.example deploy@staging-api:/opt/billing-api/Trampas
- Reenvío de agente a host no confiable - Abuso de clave si el remoto se ve comprometido. Solución: deshabilitar
-Aen producción a menos que sea necesario. - Dejar tmux como root - Sesiones compartidas confusas. Solución: tmux personal en la cuenta de usuario del servicio.
LocalForwardexpuesto en0.0.0.0- DB accesible en la WiFi del café. Solución: enlazar127.0.0.1:15432:....- Claves de producción en el portátil - Portátil robado se convierte en acceso a producción. Solución: SSO de corta duración + gestor de sesiones de bastión.
SSH StrictHostKeyCheckingdesactivado globalmente - Riesgo de MITM. Solución:known_hostspor entorno.- Particularidades obsoletas de SCP - Preferir
rsync -e sshpara sincronización de artefactos grandes.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| AWS SSM Session Manager | Sin claves SSH en VMs | Solo SSH en entornos locales |
| Teleport / Boundary | Acceso privilegiado auditado | Un pequeño equipo con bastión está bien |
| GitHub Codespaces | Entorno de desarrollo en la nube | Acceso a datos de producción prohibido |
| VPN | Acceso a subred completa | Solo se necesita un reenvío de DB |
Preguntas Frecuentes
¿Clave Ed25519 o RSA?
Ed25519 por defecto para claves nuevas - más corta, segura; RSA solo para sistemas heredados.
¿ssh-agent en macOS?
La integración con el llavero --apple-use-keychain almacena la frase de contraseña de forma segura.
¿tmux o screen?
tmux es el predeterminado moderno; mismo objetivo de persistencia.
¿Mosh para WiFi inestable?
mosh roaming UDP - bueno para viajar; requiere paquete de servidor.
¿Túnel inverso para demostración?
ssh -R 8080:localhost:8000 expone FastAPI local temporalmente - riesgo de seguridad, limita el tiempo de uso.
¿VS Code Remote SSH?
Utiliza la misma configuración SSH; asegúrate de que el entorno remoto tenga uv y el proyecto clonado.
¿SFTP vs scp?
sftp interactivo; scp de un solo uso - rsync es mejor para directorios de despliegue.
¿Múltiples claves de GitHub?
Host github.com-work con IdentityFile en la configuración SSH por organización.
¿Grabar sesiones?
Algunos requisitos de cumplimiento exigen script o grabación de sesiones de teleport en producción.
¿Hosts de salto IPv6?
AddressFamily inet explícito si el enrutamiento v6 está roto en la red corporativa.
Relacionado
- Fundamentos de Sysadmin - una vez conectado
- Gestión de Procesos y Recursos - control de servicios
- SSH y Ejecución Remota - Python fabric/paramiko
- Despliegue de FastAPI - estructura del servidor
Versiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.