我有一台正在运行的裸机服务器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. 请不要建议每个用户使用单独的服务器,在云中盯着虚拟机,有专门使用此机器的理由。