Alpine 位于 docker 容器中,可通过 ssh 从 docker 主机访问

Alpine 位于 docker 容器中,可通过 ssh 从 docker 主机访问

先说一句:一些 CICD 集成测试需要能够通过 ssh 连接到主目录中有一套测试文件的用户。这是我编写的 Dockerfile,用于创建它:

FROM alpine:latest
WORKDIR /src
COPY ./src /src
RUN apk update
RUN apk add bash
RUN apk add openssh
RUN apk add openrc
RUN rc-update add sshd 
RUN adduser -g "" -D testuser
RUN echo testuser:testpassword | chpasswd
EXPOSE 22 

这会构建一个图像,然后我以交互方式挂载它以阻止它立即退出。

docker run -dit --rm -p 5022:22 6dbd5f8ae874

此时我希望能够连接:

ssh testuser@localhost -p 5022

但是 ssh 说

kex_exchange_identification: Connection closed by remote host
Connection closed by 127.0.0.1 port 5022

记住,截至 2022-07-06,此上下文是 Alpine Linux:

  • 哪一个需要改变——客户端、服务器,还是两者?
  • 如何以及在何处?

答案1

您正在安装软件包,但尚未启动任何程序。SSHd 尚未运行。

如果你采取alpine-openrc项目例如,将其添加到您的 Dockerfile:

CMD ["/sbin/init"]

或者,如果您注意到该项目的弃用警告:

请使用*-openrc分支停泊/高山而不是这个项目。

因此,你可以使用:

FROM dockage/alpine:3.11-openrc

答案2

RUN echo -n 'PasswordAuthentication yes' >> /etc/ssh/sshd_config

允许密码验证,错误不再出现。需要进一步配置以支持基于密钥的验证,此时密码验证可以退出。与此同时,它可以正常工作。

相关内容