Docker permite desplegar entornos Linux de forma rápida y aislada sin necesidad de instalar una máquina virtual completa. En este ejemplo vamos a crear un contenedor basado en Ubuntu 24.04 que incorpora un servidor SSH, permitiendo conectarnos remotamente desde nuestro equipo mediante el protocolo Secure Shell.
El objetivo es disponer de un pequeño laboratorio Ubuntu accesible por SSH, ideal para realizar pruebas de administración de sistemas, configuración de servicios, automatización y prácticas de ciberseguridad.
1. Requisitos previos
Antes de comenzar, necesitamos:
- Docker instalado y funcionando.
- Acceso a un terminal.
- Conexión a Internet para descargar la imagen de Ubuntu e instalar los paquetes necesarios.
Podemos comprobar que Docker está disponible mediante:
docker --version
También podemos comprobar que el servicio está operativo:
docker info
2. Crear el contenedor Ubuntu con servidor SSH
Vamos a utilizar la imagen oficial de Ubuntu 24.04.
Ejecutaremos el contenedor en segundo plano, configuraremos el nombre del equipo y publicaremos el puerto 22 del contenedor en el puerto 2222 de nuestro equipo.
docker run -d \
--name ubuntu-ssh \
--hostname ubuntu-lab \
-p 2222:22 \
-e ROOT_PASSWORD='UbuntuLab_2026!' \
--restart unless-stopped \
ubuntu:24.04 \
bash -c '
set -e
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y openssh-server sudo
mkdir -p /run/sshd
printf "root:%s\n" "$ROOT_PASSWORD" | chpasswd
printf "\nPermitRootLogin yes\nPasswordAuthentication yes\n" >> /etc/ssh/sshd_config
ssh-keygen -A
/usr/sbin/sshd -t
exec /usr/sbin/sshd -D -e
'
Vamos a analizar los principales parámetros utilizados:
| Parámetro | Descripción |
|---|---|
-d | Ejecuta el contenedor en segundo plano. |
--name ubuntu-ssh | Asigna un nombre al contenedor. |
--hostname ubuntu-lab | Establece el nombre del equipo dentro de Ubuntu. |
-p 2222:22 | Redirige el puerto 2222 del host al puerto 22 del contenedor. |
-e ROOT_PASSWORD | Define una variable de entorno con la contraseña de root. |
--restart unless-stopped | Permite reiniciar automáticamente el contenedor salvo que se haya detenido manualmente. |
¿Qué hace el comando bash?
El bloque ejecutado dentro del contenedor realiza varias operaciones:
apt-get update: actualiza los índices de paquetes.apt-get install: instala OpenSSH Server y sudo.mkdir -p /run/sshd: crea el directorio necesario para ejecutar el servicio SSH.chpasswd: establece la contraseña del usuario root.PermitRootLogin yes: permite el acceso SSH de root.PasswordAuthentication yes: habilita la autenticación mediante contraseña.ssh-keygen -A: genera las claves de host SSH que necesita el servidor.sshd -t: comprueba que la configuración SSH es válida.sshd -D -e: inicia el servidor SSH en primer plano para mantener activo el contenedor y enviar los registros a la salida estándar.
Una cuestión importante es la expansión de variables de entorno. Al utilizar comillas simples en el bloque bash -c, la variable $ROOT_PASSWORD se interpreta dentro del shell del contenedor y no en el terminal del equipo anfitrión.
3. Comprobar que Ubuntu está funcionando
Una vez ejecutado el comando, podemos comprobar el estado del contenedor:
docker ps -a --filter name=ubuntu-ssh
Para consultar los registros:
docker logs ubuntu-ssh
También podemos comprobar la publicación de puertos:
docker port ubuntu-ssh
Deberíamos obtener una salida similar a:
22/tcp -> 0.0.0.0:2222
Esto indica que las conexiones recibidas en el puerto 2222 del equipo anfitrión se redirigen al puerto 22 del contenedor.
4. Conectarse a Ubuntu mediante SSH
Desde el terminal de nuestro equipo podemos iniciar una conexión SSH:
ssh -p 2222 [email protected]
La contraseña inicial configurada en este ejemplo es:
UbuntuLab_2026!
Si aparece una advertencia indicando que no se conoce la identidad del servidor, podemos aceptar su clave de host si estamos seguros de que estamos conectándonos a nuestro propio laboratorio.
Una vez dentro, podemos comprobar el sistema:
cat /etc/os-release
Consultar el usuario actual:
whoami
Y comprobar las interfaces de red:
ip addr
5. Solucionar problemas con la contraseña SSH
Uno de los problemas habituales al configurar SSH en un contenedor Docker es que la autenticación mediante contraseña no funciona.
En este ejemplo hay que prestar especial atención a la expansión de variables de entorno.
Por ejemplo, esta instrucción puede provocar problemas:
echo 'root:\${ROOT_PASSWORD}' | chpasswd
La barra invertida impide la expansión esperada de la variable. Además, las comillas simples hacen que el contenido se trate literalmente.
La instrucción correcta es:
printf "root:%s\n" "$ROOT_PASSWORD" | chpasswd
Podemos comprobar el estado de la contraseña desde el propio contenedor:
docker exec -it ubuntu-ssh passwd -S root
Si necesitamos establecer una contraseña nueva manualmente:
docker exec -it ubuntu-ssh passwd root
También podemos comprobar que la configuración SSH permite la autenticación mediante contraseña:
docker exec ubuntu-ssh sshd -T | grep -E 'permitrootlogin|passwordauthentication'
La salida debería incluir:
permitrootlogin yes
passwordauthentication yes
Para comprobar los registros del servidor:
docker logs ubuntu-ssh
6. Administrar el contenedor Docker
Una vez desplegado nuestro laboratorio, podemos utilizar diferentes comandos para gestionarlo.
Detener Ubuntu:
docker stop ubuntu-ssh
Volver a arrancarlo:
docker start ubuntu-ssh
Reiniciar el contenedor:
docker restart ubuntu-ssh
Acceder directamente a la consola de Ubuntu:
docker exec -it ubuntu-ssh bash
Consultar los registros:
docker logs ubuntu-ssh
Eliminar el contenedor:
docker rm -f ubuntu-ssh