Cómo configurar conexiones SSH para un contenedor Docker
Cuando tienes contenedores en ejecución, puede haber momentos en los que necesites conectarte a ese contenedor para ejecutar un comando o realizar algún mantenimiento. Por supuesto, siempre puedes acceder al contenedor en ejecución utilizando el comando "docker exec -it ID_DEL_CONTENEDOR bash" (donde ID_DEL_CONTENEDOR es el ID real del contenedor). Pero, ¿cómo puedes hacer SSH a esos contenedores? Y ¿deberías hacerlo? Ahí está la cuestión.
![Cómo configurar conexiones SSH para un contenedor Docker - Video](https://i.ytimg.com/vi/vsy5MjEcLb0/hqdefault.jpg)
El problema es que, debido a que hay tantas partes en movimiento, los contenedores pueden ser inseguros. Debido a eso, no querrás permitir conexiones SSH a los contenedores en entornos de producción, pero para entornos de desarrollo y pruebas, esto puede ser de gran ayuda.
Dicho esto, te mostraré cómo configurar conexiones SSH para un contenedor Docker. Demostraré utilizando la última imagen de Ubuntu.
Lo que necesitarás
Para hacer esto funcionar, necesitarás una instancia en ejecución de Docker instalada en tu distribución de Linux elegida.
Eso es todo. Hagamos magia con Docker/SSH.
Cómo crear el Dockerfile necesario
Lo primero que haremos es crear un Dockerfile a partir del cual se implementará el contenedor. Inicia sesión en tu servidor Linux y ejecuta el siguiente comando:
![](https://newsmatic.com.ar/wp-content/uploads/obtener-un-ano-de-lecciones-de-microsoft-office-con-juego-de-cds-imagen-2-150x150.webp)
nano Dockerfile
En ese archivo, pega lo siguiente:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:CONTRASEÑA' | chpasswd
![](https://newsmatic.com.ar/wp-content/uploads/guia-examen-certificacion-lotus-notes-desarrollo-aplicaciones-administracion-sistema-imagen-1-132x150.webp)
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Donde "CONTRASEÑA" es una contraseña fuerte/única.
Guarda y cierra el archivo.
![](https://newsmatic.com.ar/wp-content/uploads/como-gestionar-eficazmente-grandes-volumenes-de-correo-electronico-150x150.png)
Cómo construir la imagen e implementar el contenedor
Ahora podemos construir nuestra imagen a partir del Dockerfile con el siguiente comando:
sudo docker build -t sshd_ubuntu .
El comando anterior tomará algún tiempo en completarse porque hemos instruido (en el Dockerfile) para instalar el paquete openssh-server y ejecutar algunos comandos adicionales (para establecer la contraseña de root y habilitar el inicio de sesión de root mediante SSH).
A continuación, podemos implementar el contenedor con el comando:
docker run -d -P --name test_sshd sshd_ubuntu
Cómo encontrar la dirección IP del contenedor en ejecución
Después de implementar el contenedor, necesitamos encontrar la dirección IP del contenedor en ejecución, lo cual se hace con el siguiente comando:
![](https://newsmatic.com.ar/wp-content/uploads/integracion-de-staroffice-calendarios-150x150.jpg)
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test_sshd
La salida del comando anterior debería verse algo así:
172.17.0.15
Cómo hacer SSH al contenedor en ejecución
Desde la máquina host, ejecuta el siguiente comando:
ssh root@IP
Donde "IP" es la dirección IP de tu contenedor en ejecución. Deberías ser solicitado a ingresar la contraseña de usuario root (que se configuró en el Dockerfile) y, al autenticarte correctamente, te encontrarás en el símbolo de comando del contenedor en ejecución.
![](https://newsmatic.com.ar/wp-content/uploads/como-gestionar-eficazmente-el-correo-electronico-en-tu-empresa-150x150.jpg)
Si, sin embargo, el demonio de SSH no te permite acceder, significa que la contraseña de root no se estableció durante el proceso de creación de la imagen o el acceso SSH de root no se habilitó.
Eso no es un problema, ya que podemos acceder al contenedor y cambiar esto manualmente. Para hacer eso, primero necesitarás encontrar el ID del contenedor en ejecución. Para eso, ejecuta el siguiente comando:
docker ps -a
Deberías ver un contenedor llamado "sshd_ubuntu" en la lista, así como su ID. Para acceder al contenedor en ejecución, ejecuta el siguiente comando:
docker exec -it ID bash
Donde "ID" es el ID del contenedor asociado con el contenedor "sshd_ubuntu". Una vez dentro del contenedor, ejecuta el siguiente comando:
![](https://newsmatic.com.ar/wp-content/uploads/wordperfect-office-2000-la-solucion-perfecta-para-compartir-documentos-en-diferentes-plataformas-150x150.jpg)
passwd
A continuación, instala nano con:
apt-get install nano -y
Abre el archivo de configuración del demonio de SSH con:
nano /etc/ssh/sshd_config
En ese archivo, descomenta la línea:
![](https://newsmatic.com.ar/wp-content/uploads/contar-elementos-excel-forma-rapida-imagen-2-150x150.webp)
#PermitRootLogin yes
Esa línea debería verse así:
PermitRootLogin yes
Reinicia el demonio de SSH con:
/usr/sbin/sshd -D
Sal del contenedor y ahora deberías poder hacer SSH a ese contenedor en ejecución sin problemas.
![](https://newsmatic.com.ar/wp-content/uploads/compartir-bandeja-de-entrada-outlook-equipo-imagen-3-150x150.webp)
Si eres un desarrollador de contenedores Docker, es posible que desees considerar este pequeño truco para ayudar a que el desarrollo de contenedores e imágenes sea un poco más eficiente. Solo recuerda desactivar el inicio de sesión de root por SSH para cualquier contenedor que implementes en producción. Mejor prevenir que lamentar.
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Software, allí encontraras muchos artículos similares a Cómo configurar conexiones SSH para un contenedor Docker , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados