如何将 ssh 登录重定向到服务器的 Docker 容器

如何将 ssh 登录重定向到服务器的 Docker 容器

我正在为学习 Linux 的学生规划一个服务器,并为此制定了一些规则。

  1. 所有学生将获得相同的 SSH 服务器域/端口,以及各自的用户名/密码(正常权限)。

  2. 4 台服务器将组成集群,对于所有非管理员用户,它将重定向到各自的 Docker*。

  3. 所有学生都可以使用 SSH 客户端通过内部网络访问服务器。

问题很简单,“如何让每个用户使用相同的域/端口通过 SSH 访问指定的 Docker”。这显然意味着服务器必须仅根据用户名将 SSH 请求重定向到每个自己的 Docker。

最终目标是所有学生都能够通过 Bash shell 在 Linux 环境上编写和构建他们的程序,并在 SSH 会话中完成几乎所有其他操作。

我读过各种 Docker 和 SSH 文档,但找不到合适的解决方案。如能得到任何帮助我将不胜感激 :)。

附言:

虽然这可能是 XY 问题,但我之所以想要这个,是因为我不想让服务器被一个用户毁掉。当然,你可以建议另一种方法来满足这个要求。

答案1

A类似问题被问到这个问题可能会回答你的问题:

考虑使用ForceCommand指令sshd_config。例如,我使用这些强迫群组用户分配到一组服务器:

Match Group group1
       ForceCommand ssh -t group1.fqdn

Match Group="*,!local,!group2,!root"
       ForceCommand ssh -t group3.fqdn

您可以使用:

Match User foo
    ForceCommand ssh -t target-host

我从来没有使用过这个,但是一组指令(每个用户一个)可以构成你所提议的“SSH 网关”。

答案2

我宁愿使用 KVM 和 ansible/saltstack/puppet 并拥有主快照 VM。

KVM 虚拟机管理程序与 dokcer 一样聪明,可确保即使一个虚拟机试图发疯,每个虚拟机也不会获得所有资源。无需担心解决内存占用、权限问题、CPU 问题。您甚至可以像使用 docker 一样过度使用,这太酷了。

  • 您可以通过单个 GUI 工具控制每个 VM
  • 第一天,你快照黄金镜像并将其复制到每台机器上
  • 每台机器都有自己的(桥接)独特的IP地址
  • 每个虚拟机都可以通过 GUI 或 ssh 关闭/停止/重启

kvm 在 cli 上运行良好,但也有一些小型 gui 工具,您可以轻松立即掌握根控制台,并在一个屏幕上查看每个虚拟机使用的资源。它很简陋,但效果很好。

你可以使用 ansible 或 saltstack 等工具来实现流程自动化。例如,你可以

  • 轻松向正在运行的虚拟机添加更多内容
  • 你可以保存快照
  • 撤销每个或单个虚拟机上的用户权利或权限
  • 使用 ansible 命令停止一个或所有虚拟机
  • 更新黄金映像并将其再次传播到所有机器
  • (重新)移动或复制一张或全部图像
  • 保存一张或所有图像
  • 动态添加个人用户
  • 动态添加单个数据包
  • 快照 a 或所有虚拟机

为什么不使用 Docker?Docker 很棒,我也用它。Docker 本来是“只读”的,用于向客户提供内容。这不太符合要求?

但请记住,

  • 内部 docker 网络
  • 有 docker 注册表,需要保持干净
  • 如果你没有附加另一个数据容器,那么如果你更新
  • 你还需要担心 cgroups 和命名空间

VM 的行为与正常系统类似,学生无法轻易隐藏,因为学生有一个明确的 IP 地址。

由于 HDD 空间是服务器中成本最低的部分之一,我宁愿购买额外的主服务器或 PC/笔记本电脑,并使用它来完全控制 4 台服务器,然后运行 ​​X VM,每台服务器都有自己独特的 IP 和/或 DNS 名称。

设置这个需要做更多的工作,但我想说您还可以对服务器和学生有更多的控制权,因为您可以直接访问虚拟机。

一旦一切就绪,您就可以使用一些工具和 ansible 命令(或类似工具)从头到尾控制您的课程。

哦,如果您将 MAAS 加 PXE 启动添加到此设置中,您甚至可以为服务器丢失/更换做好准备,只需在新机器中设置 pxe、启动,就可以了。

这里您可以看到一个可以帮助您入门的简单设置。

相关内容