【问题标题】:Why I can not simply ssh to docker container from my windows host? [closed]为什么我不能简单地从我的 Windows 主机 ssh 到 docker 容器? [关闭]
【发布时间】:2020-02-29 18:46:37
【问题描述】:

我尝试从我的 Windows 主机 ssh 到 docker ubuntu 容器。我知道,我可以使用docker exec -it <container-name> /bin/bash 启动,但是,我想做一个普通的“ssh root@192.168.xx.xx”来登录,因为我想模拟远程计算机登录,而且它也很容易与我的 pycharm 一起使用。

但是,在我安装“openssh-server”并启动它之后,仍然无法从我的主机使用 ssh 登录。

:~$ ssh root@192.168.99.105

>>> The authenticity of host '192.168.99.105 (192.168.99.105)' can't be established.
ECDSA key fingerprint is SHA256:********
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.99.105' (ECDSA) to the list of known hosts.
root@192.168.99.105's password: xxx
Permission denied, please try again.

我该如何解决这个问题?我只想简单地 ssh 到这个容器...

【问题讨论】:

  • 你需要先配置ssh,我觉得你应该搜索allow root login
  • 谢谢,但是你知道我在哪里可以配置 ssh 以允许 root 登录吗?
  • 您应该将 Docker 容器视为单个应用程序的包装器,而不是您通常在其中获取交互式 shell 的东西。例如,您如何 ssh 到您的 Web 浏览器?跨度>
  • 嗨@DavidMaze 我只是简单地在我的窗口上使用“docker quick start”终端。

标签: docker ubuntu ssh


【解决方案1】:

您可能需要在容器上配置 sshd 以允许 root 访问和/或启用密码身份验证。

sudo sed -i 's|[#]*PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config
echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config
sudo service sshd restart

如果您的容器映像是基于 ubuntu/debian 的,则这些命令中的一个或两个可能会有所帮助。我个人从来不需要通过 ssh 进入 docker 容器。

【讨论】:

  • 嗨,你有没有在你自己的窗口上试过这个?我试过了,还是不行……
  • 我没有在 Windows 主机内的 docker 容器中尝试过这个,但这应该没关系。安装 openssh-server 后,您需要配置 sshd。如果你 docker exec 进入你的容器,这些命令应该允许使用 root 用户和密码认证的 ssh。如果您仍然遇到问题,您可以尝试为 sshd 服务启用一些日志记录以获得更多信息,而不是“权限被拒绝,请重试”。
  • 真的很奇怪,我尝试了你的方法以及@BMitch介绍的docker教程,但是,它们都不起作用。我猜,可能是网络问题?
【解决方案2】:

回答标题中提出的问题:

为什么我不能简单地从我的 windows 主机 ssh 到 docker 容器?

Docker 是一种在进程上配置 Linux 内核设置的方法,以限制进程可以看到的内容(命名空间)以及该进程可以使用多少资源(cgroups)。所以这个问题变成了“为什么我不能 ssh 进入一个进程”,答案通常是因为那个进程不是一个 sshd 服务器。 docker 的 Ubuntu 映像不是具有所有相关守护进程的虚拟机,它甚至不包括内核。相反,它是一个最小的文件系统,带有 Ubuntu 环境中的实用程序(如 apt-getbash)。

另一方面,docker exec 命令确实有效,因为它在与容器其余部分相同的隔离环境中运行第二个命令。因此,如果在映像中安装了 bash,那么 docker exec -it $container_id bash 将运行一个交互式 shell,其命名空间和 cgroup 与您的其余容器进程相同。

如果你想通过 ssh 进入你的容器,我的建议是你不要。这类似于代码异味,表明您将容器视为虚拟机,并且会遇到容器的不变性和短暂性问题。使用容器的目标是将所有更改推送到版本控制中,构建新映像并部署该映像,以应对生产环境的每次更改。这消除了状态漂移的风险,即一个人随着时间的推移进行交互式更改,而后来尝试重建环境的人不知道。

如果您仍然喜欢忽略建议,或者您的应用程序明确地是一个 sshd 服务器,那么您需要安装和配置 sshd 作为您在容器内运行的应用程序。 documentation from Docker 是关于如何做到这一点的,如果你在 sshd 上搜索,还有很多来自不同人的 Docker Hub 示例(请注意,我不相信这些都是官方的,所以我不会推荐任何一个)。

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多