为什么我不能简单地从Windows主机SSH到docker容器?

我尝试从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到这个容器...

b0539323789 回答:为什么我不能简单地从Windows主机SSH到docker容器?

要回答标题中的问题:

  

为什么我不能简单地从Windows主机SSH到docker容器?

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

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

如果您想装入容器,我的建议是不要。这类似于代码气味,这是您将容器像VM一样对待的标志,并且会遇到容器的不变性和短暂性问题。使用容器的目的是将所有更改都推送到版本控制中,生成新映像,并针对生产环境的每次更改部署该映像。这样就消除了状态漂移的风险,在这种状态下,一个人随时间进行了交互式更改,而后来尝试重建环境的人不知道该更改。

如果您仍然希望忽略建议,或者您的应用程序明确是sshd服务器,则需要在容器内将sshd安装并配置为正在运行的应用程序。 documentation from Docker上有关于如何执行此操作的信息,如果您在sshd上进行搜索,Docker Hub上还会有许多来自各个人的示例(请注意,我不相信其中任何一个都是官方的,因此我不推荐其中的任何一个)

,

您可能需要在容器上配置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容器中。

本文链接:https://www.f2er.com/3166711.html

大家都在问