Configurar Servidor SSH de Docker y Generar un Par de Claves
En este paso, configurará un contenedor Docker para simular un servidor SSH remoto y generará un par de claves seguro en su máquina anfitriona. Este enfoque proporciona un entorno más realista al separar el cliente (su anfitrión) del servidor (contenedor Docker).
Dado que Docker y el cliente OpenSSH ya están instalados en este entorno, puede proceder directamente a la configuración del servidor.
Primero, asegúrese de que el servicio Docker esté en ejecución:
sudo systemctl start docker
sudo systemctl enable docker
Ahora, creemos un contenedor Docker que actuará como nuestro servidor SSH. Utilizaremos Ubuntu como imagen base y lo configuraremos con capacidades de servidor SSH. Cree un Dockerfile:
cat > Dockerfile << 'EOF'
FROM ubuntu:22.04
## Instalar servidor OpenSSH y otras utilidades
RUN apt-get update && \
apt-get install -y openssh-server nginx sudo && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
## Crear un usuario para el acceso SSH
RUN useradd -m -s /bin/bash sshuser && \
echo 'sshuser:password123' | chpasswd && \
usermod -aG sudo sshuser
## Configurar SSH
RUN mkdir /var/run/sshd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
## Crear directorio SSH para el usuario
RUN mkdir -p /home/sshuser/.ssh && \
chown sshuser:sshuser /home/sshuser/.ssh && \
chmod 700 /home/sshuser/.ssh
## Exponer puerto SSH
EXPOSE 22 80
## Iniciar servicio SSH
CMD ["/usr/sbin/sshd", "-D"]
EOF
Construya la imagen Docker:
sudo docker build -t ssh-server .
Ejecute el contenedor Docker, mapeando el puerto 2222 de su anfitrión al puerto 22 del contenedor:
sudo docker run -d --name ssh-lab-server -p 2222:22 -p 8080:80 ssh-server
Verifique que el contenedor se esté ejecutando:
sudo docker ps
Debería ver una salida que muestre el contenedor en ejecución:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... ssh-server "/usr/sbin/sshd -D" ... Up ... 0.0.0.0:2222->22/tcp, 0.0.0.0:8080->80/tcp ssh-lab-server
A continuación, generará un par de claves SSH. Las claves SSH proporcionan una forma más segura de iniciar sesión en un servidor con SSH que el uso de una contraseña sola. Un par de claves consta de una clave privada, que debe mantenerse en secreto, y una clave pública, que se puede compartir.
Utilizaremos el comando ssh-keygen para crear un nuevo par de claves. Especificaremos el tipo de clave como rsa y el tamaño de la clave como 2048 bits para una seguridad sólida. La bandera -f nos permite especificar un nombre de archivo para nuestras claves, lo que ayuda a organizarlas. Llamaremos a nuestra clave ~/.ssh/id_rsa_lab_ssh.
Ejecute el siguiente comando. Cuando se le solicite una frase de contraseña (passphrase), simplemente presione Enter dos veces para continuar sin ella. Para este laboratorio, omitiremos la frase de contraseña por simplicidad, pero en un escenario del mundo real, siempre debe usar una frase de contraseña segura para proteger su clave privada.
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_lab_ssh
El comando generará el par de claves y le mostrará dónde se guardan los archivos.
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa_lab_ssh
Your public key has been saved in /home/labex/.ssh/id_rsa_lab_ssh.pub
The key fingerprint is:
SHA256:... labex@...
The key's randomart image is:
+---[RSA 2048]----+
| .o*+.. |
| . =.o. . |
| . o o. . |
| o . . |
| . S |
| . . . |
| o . |
| o . |
| E . |
+----[SHA256]-----+
Para confirmar que los archivos de clave se han creado, puede listar el contenido del directorio ~/.ssh. Debería ver su nueva clave privada (id_rsa_lab_ssh) y clave pública (id_rsa_lab_ssh.pub).
ls -l ~/.ssh/id_rsa_lab_ssh*
La salida será similar a esta, mostrando los dos nuevos archivos:
-rw------- 1 labex labex 1876 ... /home/labex/.ssh/id_rsa_lab_ssh
-rw-r--r-- 1 labex labex 401 ... /home/labex/.ssh/id_rsa_lab_ssh.pub
Ahora ha instalado correctamente el servidor SSH y ha creado un par de claves, que utilizará en los siguientes pasos para configurar y probar la autenticación segura.