Docker 컨테이너 SSH 오류: ssh_exchange_identification: 원격 호스트에 의해 연결이 종료되었습니다.

Docker 컨테이너 SSH 오류: ssh_exchange_identification: 원격 호스트에 의해 연결이 종료되었습니다.

openssh-server호스트에서 SSH로 연결할 수 있도록 Ubuntu 컨테이너를 설정하려고 합니다 . 나는 그것이 표준적인 방법이 아니라는 것을 알고 있지만 정말로 갖고 싶습니다 ssh.

이것은 나의Dockerfile

# 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 .

컨테이너를 시작했지만 docker run -t -d -p 2222:22SSH로 연결하려고 할 때마다 항상 오류가 발생합니다 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

이 오류의 원인과 해결 방법을 아는 사람이 있습니까?

답변1

RUN service ssh restart

이는 향후 실행 컨테이너가 아닌 이미지 생성 단계에서 SSH 서비스 다시 시작(실제로는 시작)을 실행합니다. 귀하에게는 CMDnor 가 없으므로 기본 이미지에 구성된 이미지(들)가 기본적으로 사용됩니다.ENTRYPOINTDockerfile그게 배쉬야)

즉, 컨테이너를 시작할 때 SSH 데몬이 실행되지 않습니다. 임시 해결책은 실행 중인 컨테이너에서 exec 명령을 실행하는 것입니다.docker exec your_container_name service ssh start

문제를 올바르게 해결하려면 컨테이너가 생성될 때 sshd를 시작하도록 이미지에 지시해야 합니다(참조:SSH 서비스를 Dockerize도커 문서에서). 간단히 말해서:

  • RUN service ssh restart줄을 제거하다
  • 다음 두 줄을 추가하십시오
RUN mkdir /var/run/sshd
CMD ['/usr/sbin/sshd', '-D']
  • 이미지를 다시 빌드하고, 새 컨테이너를 실행하고, SSH를 통해 즐기세요.

관련 정보