Ir directamente al contenido

Ajustes de cookies

Elija por tipo qué cookies permite. Puede cambiar su elección en cualquier momento en Ajustes de cookies, al pie de cada página. Declaración de privacidad

Necesarias

Siempre activadas

Necesarias para iniciar sesión, conservar su carrito y recordar sus preferencias. Siempre están activadas.

¿Qué cookies?
  • weboke_sessie, weboke_klant, weboke_remember: su sesión y mantener la sesión iniciada
  • weboke_basket: su carrito
  • wkBtwIncl: mostrar los precios con o sin IVA
  • wok_cookies: su elección de cookies, 12 meses

Mide qué anuncio lleva a una visita o a un pedido, para no pagar por anuncios que no sirven de nada.

¿Qué cookies?
  • Google Ads a través de Google Tag Manager (_gcl_au, _gcl_aw), hasta 90 días
  • OpenAI Ads, anuncios en ChatGPT
  • wok_aff: a través de qué socio llegó a nosotros (programa de afiliados), 60 días

4,6

País e idioma

Cada país tiene su propio sitio, con los precios y el IVA de ese país.

Ver

Módulo 2 · 2.3

Usar SSH de forma inteligente

Módulo 2: SSH y claves · Tiempo de lectura: 10 minutos

Objetivo de aprendizaje: Después de esta lección podrá usar SSH a diario de forma práctica con su propio archivo de configuración, copiar archivos con scp y rsync, y llegar a una base de datos mediante un túnel sin tener que abrir el puerto de la base de datos a internet.

Conceptos clave: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, túnel, ProxyJump, ServerAliveInterval, otro número de puerto, revocar una clave

Escribir menos con ~/.ssh/config

Al cabo de unas semanas escribirá esto decenas de veces al día:

anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10

Con un archivo de configuración para el cliente el comando se acorta y comete menos errores. El archivo está en su propio ordenador: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, sin extensión).

Host web1
    HostName 192.0.2.10
    User anna
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

Host test
    HostName test.example.com
    User anna
    Port 2222

Ahora basta con:

anna@laptop:~$ ssh web1
anna@web1:~$

¿Qué hacen estas líneas?

  • Host es el alias que usted elige. Lo escribe después de ssh, scp y rsync.
  • HostName es la dirección real: una dirección IP o un nombre que figura en el DNS.
  • User y Port son el nombre de usuario y el puerto, para que no tenga que recordarlos.
  • IdentityFile indica la clave. Resulta útil si tiene varias claves; sin esta línea, ssh prueba sus claves predeterminadas.
  • ServerAliveInterval 60 envía cada 60 segundos una pequeña señal de vida. Muchos routers domésticos y redes wifi cortan una conexión inactiva al cabo de unos minutos; así su sesión permanece abierta.

Aquí también cuenta el primer valor, igual que en el servidor. Por eso, coloque las reglas generales como Host * al final del archivo.

Copiar archivos: scp, rsync y sftp

scp copia un archivo, con la misma forma que cp, pero con host: delante:

anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .

rsync es más inteligente con carpetas y grandes cantidades de datos: solo envía lo que ha cambiado y puede reanudar una copia interrumpida. Debe estar instalado en ambos lados (apt install rsync).

anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/

Fíjese en la barra después de ./site/: con barra, rsync copia el contenido de la carpeta; sin barra, copia la carpeta misma (obtendrá entonces /var/www/example.com/site/). Si tiene dudas, pruebe primero con --dry-run, y tenga mucho cuidado con --delete, que en el lado receptor elimina todo lo que no existe en su lado.

sftp y los programas gráficos como FileZilla o WinSCP usan la misma conexión SSH y la misma clave. Por lo tanto, no necesita un servidor FTP aparte. No se recomienda un servidor FTP tradicional en un VPS: el FTP normal envía su contraseña sin cifrar por la red.

Un túnel en lugar de un puerto abierto

Quizá sea lo más útil que puede hacer SSH. Supongamos que en su servidor funciona una base de datos PostgreSQL y quiere acceder a ella desde su portátil con un programa gráfico. La tentación de abrir el puerto 5432 a internet es grande. No lo haga: los puertos de bases de datos abiertos son una de las principales causas de filtraciones de datos (lección 10.2), y más adelante el curso comprueba desde fuera que están cerrados (ejercicio Z5.1).

Con el reenvío de puertos local (local port forwarding) hace que SSH cree un túnel:

anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1

Léalo así: "escucha en mi portátil en el puerto 5432 y envía todo lo que llegue allí por la conexión SSH a 127.0.0.1:5432, visto desde el servidor". Mientras esta sesión esté abierta, conecte su programa de base de datos a localhost, puerto 5432, en su propio portátil, y llegará a la base de datos del servidor.

¿Por qué es tan bueno?

  • La base de datos solo escucha en 127.0.0.1 en el servidor y no es accesible desde fuera.
  • La conexión está cifrada por SSH, aunque la base de datos no tenga cifrado propio.
  • Solo quien puede iniciar sesión por SSH tiene acceso. Así aprovecha la seguridad sólida que ya tiene.

Si en su portátil ya hay algo en el puerto 5432, elija otro número a la izquierda: -L 15432:127.0.0.1:5432, y conéctese al puerto 15432. Si guarda el túnel en ~/.ssh/config, lo tendrá siempre a mano:

Host web1-db
    HostName 192.0.2.10
    User anna
    LocalForward 15432 127.0.0.1:5432

Con ssh -N web1-db obtiene solo el túnel, sin línea de comandos.

A través de un servidor intermedio: ProxyJump

A veces solo puede llegar a un servidor a través de otro, por ejemplo un servidor de base de datos sin dirección IP pública detrás de su servidor web. ProxyJump salta a través del primer servidor hasta el segundo:

Host db1
    HostName 10.0.0.5
    User anna
    ProxyJump web1

La diferencia con el agent forwarding (lección 2.1): con ProxyJump, el cifrado va de extremo a extremo entre su portátil y db1. El servidor intermedio solo reenvía los paquetes y no puede usar su clave.

Otro número de puerto: ¿sí o no?

Muchas guías recomiendan poner SSH en otro puerto, por ejemplo el 2222. ¿Qué consigue realmente?

  • Reduce el ruido: la mayoría de los intentos automatizados de adivinar contraseñas solo prueban el puerto 22. Su registro estará más tranquilo.
  • No es una medida de seguridad. Un escáner que recorre todos los puertos encuentra SSH en segundos por su banner de versión.

Con claves y el inicio de sesión con contraseña desactivado (lección 2.2), el puerto apenas importa para la seguridad. Si aun así quiere cambiarlo, hágalo en el orden correcto: abra el nuevo puerto en el firewall, haga que SSH escuche en ambos puertos, pruebe en una segunda ventana y solo entonces cierre el puerto antiguo. En Ubuntu 24.04 y posteriores esto incluye systemctl daemon-reload y systemctl restart ssh.socket (lección 2.2). No olvide que su proveedor quizá también tenga un firewall.

Revocar el acceso

¿Un antiguo compañero o un desarrollador web tenía una clave en su servidor y ya no trabaja para usted? Revocar el acceso es sencillo si lleva un control:

  1. Revise todas las claves: ssh-keygen -lf ~/.ssh/authorized_keys, y hágalo para cada usuario (también /root/.ssh/authorized_keys).
  2. Elimine la línea de esa persona.
  3. Si usaba su propia cuenta de usuario, bloquéela (lección 3.1) y compruebe si estaba en el grupo sudo (lección 3.2).
  4. Si ha visto contraseñas, como la de una base de datos en un archivo de configuración, cámbielas también.

Una clave normal no tiene fecha de caducidad. Lo que no elimine seguirá funcionando, incluso años después. Si da acceso temporal a alguien, puede poner la opción expiry-time="20261231" delante de su línea en authorized_keys; después de esa fecha, el servidor rechaza la clave.

Resumen

  • ~/.ssh/config en su propio ordenador guarda por servidor el nombre, el usuario, el puerto y la clave; Host * va al final.
  • scp para archivos sueltos, rsync para carpetas (cuidado con la barra y con --delete), sftp en lugar de FTP.
  • Con ssh -L llega a una base de datos mediante un túnel cifrado, mientras el puerto de la base de datos sigue cerrado desde fuera.
  • ProxyJump salta de forma segura a través de un servidor intermedio; es mejor que el agent forwarding.
  • Otro número de puerto reduce el ruido, pero no protege. Las claves que no elimina siguen funcionando.

Cuestionario

1. ¿Qué hace ssh -L 15432:127.0.0.1:5432 web1?



2. ¿Por qué un túnel SSH hacia una base de datos es mejor que abrir el puerto 5432 en el firewall?



3. Traslada SSH al puerto 2222. ¿Cuál es el efecto más importante?



4. En su ~/.ssh/config figura arriba Host * con User root, y más abajo Host web1 con User anna. ¿Con qué usuario inicia sesión en ssh web1?



5. Un desarrollador web tenía su propia clave SSH en su servidor y ya no trabaja para usted. ¿Qué NO es suficiente?



Ejercicio

Ejercicio O2.3: Una configuración SSH y un túnel. Cree en su propio ordenador un ~/.ssh/config con un alias para su servidor, inicie sesión solo con ssh <bijnaam>, copie un archivo con scp o rsync y cree un túnel con -L hacia un servicio que en su servidor solo escuche en 127.0.0.1 (si todavía no tiene base de datos, use el puerto 22 del propio servidor: ssh -L 2200:127.0.0.1:22 <bijnaam> y después ssh -p 2200 anna@localhost). Responda a las preguntas sobre qué hace el túnel y por qué no hace falta abrir el puerto.

Ejercicio O2.3: Una configuración SSH y un túnel

Este ejercicio lo hace usted mismo; nadie lo revisa. Marque lo que haya hecho y señale el ejercicio como realizado.




Sus marcas y notas se quedan solo en este navegador; no las enviamos a ningún sitio. Si ha iniciado sesión, en Mis cursos solo guardamos que ha realizado el ejercicio.

Para saber más

Los pasos de estos artículos se aplican a los VPS y paneles de WebOké; con otros proveedores funciona de forma similar.

Un momento…

Configure sus dominios

Configure para cada dominio los servidores de nombres, la vinculación a su hosting y quién será el titular.

Cargando sus dominios…