我正在尝试构建一个系统,该系统将运行短期(CI 和测试版本)的软件组件,根据我的要求,每个组件都位于私人主机上是强制性的。我将这个定义也包含在半虚拟化选项中,因为它似乎可以让我省去很多麻烦。
我在 Mac 上工作,所以几乎所有技术都已淘汰,libvirt和quemu等对我不起作用。然而,我计划部署到 Debian;所以在 Debian 上运行的任何东西都回到了桌面上,前提是我可以编写主机及其来宾域的配置脚本。
我的预期设置是我可以用来引导 Debian 安装程序,这意味着在启动时,机器会自动配置(Chef、Puppet、Babushka,别介意,真的) - 并且该配置的一部分应该构建一个可用于启动容器的模板 rootfs。容器本身也需要进行配置,这样当容器上来的时候,知道要做什么工作,可以做工作,然后退出。
简而言之,这是我需要的工作流程:
我已经到了尝试以下的地步,并出于以下内联的原因放弃了它们:
对于主机
老实说,我不确定人们应该使用什么技术来将虚拟机从一无所有变成一个运行、工作和有用的系统。对我来说似乎是三个步骤 …
我正在使用autossh
私钥打开反向 SSH 隧道。隧道用户的 shell 已经rssh
并被验证为工作正常。
我遇到的问题是这样的,无论 ClientAliveInterval ( 15
) 和 ClientAliveCountMax ( 3
) (sshd
默认值)如何,在客户端,隧道是通过以下方式打开的:
exec autossh -N \
-o "ServerAliveInterval 60" \
-o "ServerAliveCountMax 3" \
-o "StrictHostKeyChecking no" \
-R ${tunnel_port}:localhost:22 \
-i ./tunnel \
-v \
tunnel@directory.mytunnelhost.com
Run Code Online (Sandbox Code Playgroud)
在${tunnel_port}
来自一个小curl
的呼叫看起来隧道主机上的空闲端口,该端口不会改变(它是基于请求对话框的MAC地址分配)
问题是在TERM
启动隧道客户端时,端口在主机上一直被占用,而 sshd 进程继续运行:
我也无法通过隧道登录机器:
ubuntu@ip-10-252-138-233:~$ ssh -p 39777 pi@localhost
ssh: connect to host localhost port 39777: Connection refused
Run Code Online (Sandbox Code Playgroud)
我想知道我能做些什么来使隧道更可靠,以确保当任一端发生故障时,它已经完全死机,被拆除并且不能进入“损坏”状态。
如果我通过端口 80 或类似端口建立隧道,我可以编写一个check
脚本(这个守护进程runit
以,我不知道客户如何知道隧道是否真的 …