Conexion y configuracion
Conocer ssh usuario@host basta para empezar. El archivo ~/.ssh/config convierte hosts largos, puertos raros y claves distintas en alias cortos y seguros.
Anatomia de una conexion
ssh -p 22 -i ~/.ssh/id_ed25519 usuario@192.0.2.10| Elemento | Significado |
|---|---|
| usuario | Cuenta remota (ubuntu, deploy, tu user) |
| host | IP, DNS o alias de ~/.ssh/config |
-p | Puerto (por defecto 22) |
-i | Ruta a la clave privada |
Comandos utiles en sesion:
# Salir
exit
# Forzar desconexion si la sesion se cuelga: Enter, ~.Archivo ~/.ssh/config
Crea o edita ~/.ssh/config (modo 600):
Host prod-api
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519_prod
IdentitiesOnly yes
Host staging
HostName staging.ejemplo.com
User ubuntu
IdentityFile ~/.ssh/id_ed25519
ForwardAgent noUso:
ssh prod-api
ssh stagingIdentitiesOnly yes evita que el cliente pruebe todas las claves del agente (algunos servidores cortan tras N intentos fallidos).
Opciones frecuentes
| Directiva | Uso |
|---|---|
HostName | IP o DNS real |
User | Usuario remoto por defecto |
Port | Puerto distinto de 22 |
IdentityFile | Clave privada concreta |
ServerAliveInterval 30 | Evita cortes por idle en NAT/firewall |
ServerAliveCountMax 3 | Reintentos de keepalive |
StrictHostKeyChecking ask | Pregunta ante host nuevo (dev) |
ProxyJump bastion | Salto via bastion (ver abajo) |
Ejemplo con keepalive:
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
AddKeysToAgent yesHost * aplica defaults; las entradas mas especificas pueden sobrescribirlas.
Bastion / jump host
Arquitectura tipica: solo el bastion es publico; las maquinas internas no tienen SSH expuesto.
Host bastion
HostName bastion.ejemplo.com
User ops
IdentityFile ~/.ssh/id_ed25519
Host db-interno
HostName 10.0.1.20
User postgres
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519Equivalente en linea:
ssh -J ops@bastion.ejemplo.com postgres@10.0.1.20Multiplexing (sesiones mas rapidas)
Abrir un canal maestro reutilizable:
Host *
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10mLa primera conexion es normal; las siguientes reutilizan el socket y arrancan casi al instante (util con Git y Ansible).
Verificar configuracion
ssh -G prod-api | grep -E 'hostname|user|port|identityfile'
ssh -v prod-api-v / -vv / -vvv aumentan el detalle de negociacion (util en fallos de auth).
Errores habituales
- Poner espacios mal en
~/.ssh/config(el formato es sensible a indentacion simple). IdentityFileapuntando a la.pub.- Olvidar
IdentitiesOnly yesy agotarMaxAuthTriesdel servidor. - Guardar
configcon permisos abiertos en entornos compartidos.
Buenas practicas
- Un
Hostpor entorno (prod, staging, laptop-lab). - No hardcodear contrasenas; solo claves y agentes.
- Documentar en el propio
configel proposito con comentarios#. - Para equipos, versionar un
config.examplesin secretos.
Ejercicio
- Crea un alias
labhacia un servidor o VM. - Anade
ServerAliveIntervalyIdentitiesOnly yes. - Conecta solo con
ssh laby verifica usuario remoto.
Siguiente paso
Continua con Agentes y forwarding.
