~/docs /DevOps/SSH Config y Túneles

DevOps

SSH Config y Túneles

Imported from Notion: SSH Config y Túneles

updated:: 2026.07.10

Qué resuelve

Configurar accesos SSH cómodos con ~/.ssh/config, usar túneles locales/remotos y transferir archivos con scp o rsync.


~/.ssh/config

Archivo:

~/.ssh/config

Ejemplo:

Host prod
  HostName 203.0.113.10
  User deploy
  Port 22
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

Con eso:

ssh prod

Permisos:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/config

Debug de conexión

ssh -vvv prod

Ver configuración efectiva:

ssh -G prod | less

ProxyJump

Con salto por bastion:

Host bastion
  HostName 198.51.100.10
  User deploy
  IdentityFile ~/.ssh/id_ed25519

Host internal
  HostName 10.0.0.20
  User deploy
  ProxyJump bastion
  IdentityFile ~/.ssh/id_ed25519

Conectar:

ssh internal

Túnel local

Exponer en tu máquina local un servicio que vive en el servidor:

ssh -L 8080:127.0.0.1:80 prod

Luego abres:

http://localhost:8080

Uso típico: ver una app interna, panel admin o base de datos accesible solo desde el servidor.


Túnel remoto

Exponer en el servidor un puerto que apunta a tu máquina local:

ssh -R 9000:127.0.0.1:3000 prod

[!NOTE] ⚠️ Los túneles remotos dependen de la config del servidor (AllowTcpForwarding, GatewayPorts) y pueden exponer servicios. Úsalos con intención clara.


scp

Copiar archivo local al servidor:

scp archivo.txt prod:/tmp/

Copiar del servidor a local:

scp prod:/var/log/app.log .

Copiar carpeta:

scp -r carpeta prod:/tmp/

rsync

Subir carpeta sincronizando:

rsync -avz --progress ./dist/ prod:/opt/app/dist/

Simular antes:

rsync -avzn --delete ./dist/ prod:/opt/app/dist/

Sincronizar con borrado:

rsync -avz --delete ./dist/ prod:/opt/app/dist/

[!NOTE] ⚠️ --delete borra en destino lo que no exista en origen. Usa primero -n para dry-run.


Errores comunes

  • Permisos abiertos en ~/.ssh/config o claves privadas.

  • No usar IdentitiesOnly yes y que SSH pruebe claves equivocadas.

  • Confundir túnel local -L con remoto -R.

  • Usar scp -r para sincronizaciones repetidas donde conviene rsync.

  • Ejecutar rsync --delete sin dry-run.


Checklist final

  • Tengo alias en ~/.ssh/config.

  • Probé ssh -vvv si falla.

  • Uso ProxyJump si hay bastion.

  • Sé si necesito -L o -R.

  • Para transferencias repetidas uso rsync.

  • Antes de --delete, ejecuto dry-run con -n.

- EOF -