通过SSH隔离的Docker环境

时间:2018-12-16 21:35:30

标签: docker

我正在设置一系列Linux命令行挑战(供内部使用/培训),类似于OverTheWire.org的Bandit上的挑战。从我对他们的基础架构所做的一些阅读中,他们设置了以下内容:

  

OverTheWire上所有基于ssh的游戏都在Docker容器中运行。当你   使用SSH登录其中一个游戏,新的Docker容器是   专为您创建。没有其他人登录到您的容器,也没有   是否有来自其他玩家的文件。我们选择了这个   为每个玩家提供一个干净的环境进行实验的设置   并学习,退出后会自动清理。

这似乎是一个理想的解决方案,因为每个登录的人都拥有一个完全干净的环境(注销时销毁),以便同时玩的玩家不会互相干扰。

我是Docker的新手,并且从原则上理解它,但是不确定如何设置类似的系统-尤其是在通过SSH登录服务器时生成新的Docker实例,然后在注销/断开连接时销毁该实例。

对于有关如何设计/实现这种设置的任何建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

在我看来,这里有两个主要目标。首先要了解docker的真正功能以及工作原理。其次是要求整个系统的系统。

让我做一些简短的介绍。我将不赘述,但主要是docker是一个平台,其工作原理类似于系统虚拟化,可让您隔离进程,操作系统或整个应用程序,而无需任何类型的管理程序。容器共享主机系统的内核,它包含的所有内容均与主机和其余容器分离。

因此,您要寻找的基本原理是编排具有ssh服务器且端口22打开的容器的系统。尽管有很多方法可以实现此目标,但是docker sshd server image可以是一种方法。

docker run -itd --rm rastasheep/ubuntu-sshd bash
  • Docker需要一个流程来维持生命。通过使用 -it ,您可以使用“ bash”解释器创建一个交互式会话。这样可以使容器保持活动状态,并允许您在隔离的虚拟ubuntu服务器内部启动bash终端。
  • -rm :将容器中的容器移除后。
  • rastasheep / ubuntu-sshd :这是Docker映像ID。

如您所见,您的应用程序和此docker平台之间缺少连接系统。一种方法是使用a library来让python使用docker客户端编程。作为建议,我建议您在计算机上安装docker,并尝试使用ssh服务器创建几个ubuntu服务器并从主机连接到它。它将帮助您了解是否确实需要sshd服务器,如果有,则需要网络要求,以将所有客户端传送到容器中。阅读官方docker network documentation

在上述示例中,我描述了一个新的新终端已启动,并且不需要通过ssh连接到docker。通过这种方式,您将不需要路由流量,确定主机空闲端口以将主机连接到容器或在连接完成后检查并关闭容器。否则容器将继续存活。

有很多方法可以构建您的系统,我强烈建议您首先使用docker工具创建一些容器,然后开始了解其工作原理。