![Alpine 位于 docker 容器中,可通过 ssh 从 docker 主机访问](https://linux22.com/image/778436/Alpine%20%E4%BD%8D%E4%BA%8E%20docker%20%E5%AE%B9%E5%99%A8%E4%B8%AD%EF%BC%8C%E5%8F%AF%E9%80%9A%E8%BF%87%20ssh%20%E4%BB%8E%20docker%20%E4%B8%BB%E6%9C%BA%E8%AE%BF%E9%97%AE.png)
先说一句:一些 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
允许密码验证,错误不再出现。需要进一步配置以支持基于密钥的验证,此时密码验证可以退出。与此同时,它可以正常工作。