SSH 权限被拒绝(公钥、密码) - 容器 docker ubuntu 18.04

Posted

技术标签:

【中文标题】SSH 权限被拒绝(公钥、密码) - 容器 docker ubuntu 18.04【英文标题】:SSH Permission denied (publickey,password) - container docker ubuntu 18.04 【发布时间】:2021-08-10 14:31:42 【问题描述】:

我在我的 Windows 10 上安装了 Docker,我正在使用我的 WSL1 来创建 dockerfile、构建和运行容器,但我无法通过 ssh 连接,我得到 Permission denied (publickey,password)强>

我的 dockerfile 是

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

我的 docker ps 是:

CONTAINER ID   IMAGE     COMMAND               CREATED         STATUS         PORTS                   NAMES
b41411ef7a8a   eg_sshd   "/usr/sbin/sshd -D"   4 minutes ago   Up 4 minutes   0.0.0.0:32768->22/tcp   test_sshd

ssh 端口是这样的:

➜ root$ docker port test_sshd 22
0.0.0.0:32768
          

当我尝试通过 ssh 连接时,我得到 “权限被拒绝”

➜  root$ ssh root@0.0.0.0 -p 32768                  
root@0.0.0.0: Permission denied (publickey,password).

ssh 服务启动

➜ root$ docker exec b41411ef7a8a service ssh status
 * sshd is running

我做错了什么......我不知道。

【问题讨论】:

【参考方案1】:

问题出在这一行:

RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

因为原行是:

#PermitRootLogin prohibit-password

所以sed 有效,但该选项仍被注释掉。毫无疑问,您知道如何解决此问题,但以防万一解决方案是将 # 添加到匹配部分:

RUN sed -Ei 's/#(PermitRootLogin).+/\1 yes/' /etc/ssh/sshd_config

顺便说一句,通常您不需要在容器中使用ssh 服务器即可进入其中。可以使用docker exec -it <container> sh 或(对于 Kubernetes)kubectl exec -it <pod_name> sh 在容器内打开 shell。

【讨论】:

以上是关于SSH 权限被拒绝(公钥、密码) - 容器 docker ubuntu 18.04的主要内容,如果未能解决你的问题,请参考以下文章

权限被拒绝(公钥、密码)。 rsync:连接意外关闭 - gitlab

通过 SSH 将 gitlab-runner(服务器)连接到虚拟机失败:权限被拒绝(公钥、密码)

通过公钥进行 ssh 访问失败“权限被拒绝(公钥)”

gcloud:ssh-ing到服务器时权限被拒绝(公钥)

Ubuntu WSL Ansible - 用户@localhost 权限被拒绝(公钥,密码)

root@0.tcp.ngrok.io:权限被拒绝(公钥,密码)