当SSH到容器时要求输入密码

8
我创建了一个 Docker 镜像,用于测试使用 SSH 登录容器。但是当我尝试通过 SSH 进入容器时,系统要求输入 root 密码。有什么办法可以绕过此问题。
Dockerfile:
FROM ubuntu:trusty

RUN apt-get update

RUN apt-get install -y openssh-server supervisor vim build-essential git
RUN mkdir -p /var/run/sshd
ADD supervisord/sshd.conf /etc/supervisor/conf.d/sshd.conf
RUN echo 'root:root' | chpasswd

EXPOSE 22
CMD ["/usr/bin/supervisord"]

supervisord/sshd.conf

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D
1个回答

13

您需要将公钥添加到容器的 root/.ssh/authorized_keys文件中。

如果sshd在那里找不到您的公钥,它将会回退到用户名密码认证。

例如:设置Docker镜像上的ssh公钥,但我不喜欢它,因为这意味着容器拥有私钥(它不需要)。

最好的方法是:

  • 本地生成您的公/私钥。
  • 在您的Dockerfile中添加 COPY yourPublicKey /root/.ssh/authorized_keys

这样就生成了一个镜像,其容器可以通过ssh进行访问。

请确保在主机上,您的$HOME/.ssh中拥有私钥id_rsa和公钥id_rsa.pub

这启用了您的Docker主机和Docker容器之间的ssh身份验证,遵循一般的ssh身份验证机制,如下图所示:http://sebastien.saunier.me/images/posts/SSH%20Connection%20explained.png

(来源:“GitHub公钥身份验证”,来自Sébastien Saunier‏- @ssaunier)


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Toshi
@Toshi,你的问题是关于如何使用SSH,而不是使用用户名/密码,是吗? - VonC
1
是的,但我只是好奇。因为有两种使用ssh登录的方式。1.公共认证密钥2.用户名/密码。当我尝试使用用户名/密码时,我被要求输入密码,但我无法登录(我不知道确切的密码)。 - Toshi
1
@Toshi,这是有道理的。根账号不是你可以通过用户名/密码登录的账号。因此,如果你想要成功进行ssh会话的身份验证,就需要将你的公钥放在正确的位置上。 - VonC
1
@vishal.k 我不熟悉关于docker exec所需凭据的情况。也许你可以将这个评论作为一个单独的问题发布,供社区参考? - VonC
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接