我尝试从 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.
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?我只想简单地 ssh 到这个容器......
回答标题中提出的问题:
为什么我不能简单地从 Windows 主机 ssh 到 docker 容器?
Docker 是一种在进程上配置 Linux 内核设置的方法,以限制进程可以看到的内容(命名空间)以及进程可以使用的资源数量(cgroup)。所以这个问题变成了“为什么我不能 ssh 进入一个进程”,答案通常是因为该进程不是 sshd 服务器。docker 的 Ubuntu 镜像并不是一个带有所有相关守护进程的虚拟机,它甚至不包括内核。相反,它是一个最小的文件系统,包含 Ubuntu 环境中的实用程序(如apt-get和bash)。
另一方面,该docker exec命令确实有效,因为它正在与容器的其余部分相同的隔离环境中运行第二个命令。因此,如果bash安装在映像中,则将docker exec -it $container_id bash运行一个交互式 shell,其命名空间和 cgroup 与容器进程的其余部分相同。
如果您想通过 ssh 进入容器,我的建议是不要这样做。这类似于代码异味,表明您将容器视为虚拟机,并且容器的不变性和短暂性会出现问题。使用容器的目标是将所有更改推送到版本控制中,构建新映像并部署该映像,以应对生产环境的每次更改。这消除了状态漂移的风险,即一个人随着时间的推移进行交互更改,而稍后尝试重建环境的人却不知道。
如果您仍然愿意忽略该建议,或者您的应用程序明确是 sshd 服务器,那么您需要安装并配置 sshd 作为容器内运行的应用程序。Docker提供了有关如何执行此操作的文档,如果您在 sshd 上搜索,则 Docker Hub 上有来自不同个人的大量示例(请注意,我不认为这些示例是官方的,因此我不会推荐它们中的任何一个)。
| 归档时间: |
|
| 查看次数: |
1920 次 |
| 最近记录: |