Estoy intentando configurar un contenedor de Ubuntu openssh-server
para poder acceder a él desde el host. Sé que no es la forma estándar de hacerlo, pero realmente quiero tenerlo ssh
.
Este es miDockerfile
# Select base image
FROM ubuntu:16.04
# Set the current working directory
WORKDIR /home
# Update the system, download any packages essential for the project
RUN dpkg --add-architecture i386
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y git build-essential make gcc vim net-tools iputils-ping ca-certificates openssh-server libc6:i386 libstdc++6:i386
# Allow ssh root login
RUN echo "root:root" | chpasswd
# RUN rpl "PermitRootLogin prohibit-password" "PermitRootLogin yes" /etc/ssh/sshd_config
RUN sed -i 's/prohibit-password/yes/' /etc/ssh/sshd_config
RUN cat /etc/ssh/sshd_config
RUN mkdir /root/.ssh
RUN chown -R root:root /root/.ssh;chmod -R 700 /root/.ssh
RUN echo “StrictHostKeyChecking=no” >> /etc/ssh/ssh_config
RUN service ssh restart
# Open port 22 so linked containers can see it
EXPOSE 22
# Import any additional files into the environment (from the host)
ADD otherfile .
Empiezo el contenedor docker run -t -d -p 2222:22
pero cada vez que intento ingresar mediante ssh siempre termino recibiendo el error ssh_exchange_identification: Connection closed by remote host
:
➜ ssh -v -p 2222 root@localhost /bin/bash
OpenSSH_7.9p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/giorgio/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: /etc/ssh/ssh_config line 52: Applying options for *
debug1: Connecting to localhost port 2222.
debug1: Connection established.
debug1: identity file /Users/giorgio/.ssh/id_rsa type -1
debug1: identity file /Users/giorgio/.ssh/id_rsa-cert type -1
debug1: identity file /Users/giorgio/.ssh/id_dsa type -1
debug1: identity file /Users/giorgio/.ssh/id_dsa-cert type -1
debug1: identity file /Users/giorgio/.ssh/id_ecdsa type -1
debug1: identity file /Users/giorgio/.ssh/id_ecdsa-cert type -1
debug1: identity file /Users/giorgio/.ssh/id_ed25519 type -1
debug1: identity file /Users/giorgio/.ssh/id_ed25519-cert type -1
debug1: identity file /Users/giorgio/.ssh/id_xmss type -1
debug1: identity file /Users/giorgio/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.9
ssh_exchange_identification: Connection closed by remote host
¿Alguien sabe qué causa este error y cómo solucionarlo?
Respuesta1
RUN service ssh restart
Esto ejecuta un reinicio del servicio ssh (bueno, en realidad un inicio) durante la fase de creación de la imagen, no en el futuro contenedor en ejecución. No hay CMD
ni ENTRYPOINT
en ti, Dockerfile
por lo que el valor predeterminado es el configurado en tu imagen base (que es bash)
En otras palabras, no hay ningún demonio ssh ejecutándose cuando inicia su contenedor. Una solución temporal es ejecutar un comando ejecutivo en el contenedor en ejecución:docker exec your_container_name service ssh start
Para solucionar el problema correctamente, debe indicarle a la imagen que debe iniciar sshd cuando se crea un contenedor (consulte ladockerizar un servicio sshen documentos acoplables). En breve:
- eliminar la
RUN service ssh restart
línea - agrega las dos líneas siguientes
RUN mkdir /var/run/sshd
CMD ['/usr/sbin/sshd', '-D']
- reconstruya su imagen, inicie un nuevo contenedor, haga ssh y disfrute.