![通过 SSH 在 Ubuntu 22.04 专用服务器上为每个用户提供隔离的可写持久环境(无 GUI)](https://linux22.com/image/952769/%E9%80%9A%E8%BF%87%20SSH%20%E5%9C%A8%20Ubuntu%2022.04%20%E4%B8%93%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%B8%BA%E6%AF%8F%E4%B8%AA%E7%94%A8%E6%88%B7%E6%8F%90%E4%BE%9B%E9%9A%94%E7%A6%BB%E7%9A%84%E5%8F%AF%E5%86%99%E6%8C%81%E4%B9%85%E7%8E%AF%E5%A2%83%EF%BC%88%E6%97%A0%20GUI%EF%BC%89.png)
我有一台正在运行的裸机服务器Ubuntu 22.04。由多个用户共享。服务器主要用于一些繁重的开发人员工作:构建、调试等。用户只有 SSH访问,服务器上没有 GUI,最好保持这种状态。
一切都很好,直到多个用户想要同时启动一些占用某些不可共享资源(如文件锁或 TCP 端口)的软件(例如 HTTP 服务器)。可以协商和分配不同的端口等,但这很麻烦,需要一些手动干预。
有没有办法在登录时将每个用户的会话包装到某个容器或虚拟机中?
KVM 似乎是一个理想的解决方案,但指南要么过时,要么混乱,要么需要 GUI 访问,或者以上皆有。
Docker 是一个不错的解决方案,但我们需要在用户会话内部的 Docker 容器中运行一些软件,而且我听说 docker-in-docker 不是最好的,最好避免。
不过说实话,我并不关心使用什么隔离技术,只要文件系统、TCP 端口、不同用户的进程相互隔离就行。为了简单起见,我们把这种技术称为 VM(虚拟机)。
理想的解决方案:
- 不需要重新安装主机操作系统
- VM 可写且持久(注销后不会丢失任何内容)
- 有每个用户最多 1 个 VM,因此新的 SSH 会话进入现有的 VM。
- 启动时间短:第一个 VM 启动时间不到 10 分钟,后续 VM 启动时间不到 1 分钟,进入已运行 VM 的时间不到 5 秒。服务器功能非常强大,因此对于合理的软件来说,这些数字似乎很容易满足。
- 设置相对容易/自动化
- 对其他工具来说,仅作为一个 ssh 连接是透明的(例如,可以使用 VSCode 远程 ssh 功能)
- 为机器上的每个用户运行一个初始化脚本进行一次设置就可以了,无需自动缩放等。
- 无需共享音频/视频等多媒体子系统(这些子系统在机器上很可能不存在)
- 不需要在后台运行一些疯狂的专有守护进程,监视用户/VM/OS 活动并向光明会或挖掘比特币发送报告。
- (可选)在用户注销后,让虚拟机保持活动状态一段时间(几个小时,最好是可配置的,以防连接断开)
- (可选)允许重新使用某些自定义图像作为起点(如果用户之前没有启动虚拟机)
- (可选)用户还可以通过 SSH 进入 HOST OS 进行维护。
你们有推荐的最新指南或预制自动化工具吗?任何帮助我都非常感谢。
提前致谢。
PS. 请不要建议每个用户使用单独的服务器,在云中盯着虚拟机,有专门使用此机器的理由。