Linux 上用于远程网络干预的死人开关

Linux 上用于远程网络干预的死人开关

由于我要更改远程服务器的网络配置,因此我正在考虑一些安全机制来保护我免于意外失去对服务器的控制。

我使用的 0 级保护是计划的系统重启:

# at now+x minutes
> reboot
> ctrl+D

其中 x 是重启前的延迟。

虽然这种方法对于诸如使用 iptables 之类的简单任务非常有效,但它至少有两个缺点:

  • 它的反应能力不是很强,也就是说,如果自动远程 ssh 命令失败并且 x 秒内不再起作用,则应该自动检测到连接问题。
  • 如果需要修改一些配置文件,然后重新启动来测试更改,这显然行不通。

你们是否使用某种工具来解决第二点?如果我在重启后 X 分钟内无法加入服务器,我希望有某种工具能够将系统配置恢复到先前已知的稳定状态。

谢谢!

编辑:

  • 该服务器是一个远程 Linux 服务器,具有类似 Debian 或 RHEL 的发行版。

  • 我只能访问防火墙后面的这台特定服务器。除端口 22 (ssh) 外,所有端口均已过滤。因此没有 KVM 交换机、没有 iDRAC 等。

  • 如果发生严重故障,我可以在这台机器上获得本地支持,但这需要太多时间:开车去那里需要三个小时。我宁愿把这段时间花在服务器故障上或开发自己的工具上,以避免去那里。

  • 我的实际计划:开发一些基于 mercurial 或 git 的丑陋工具,并在 cron 中调用“hg revert; reboot”。我只是想知道是否已经存在一些经过良好测试的工具。

答案1

如果没有其他连接方法(例如 ewwhite 建议的方法),我认为您的方法很好。它很简单,您可以给自己足够的时间。

注意 - 我认为您不需要重启服务器来验证您的更改 - 如果绝对必要,请重启相应的服务。重启不是“锁定”更改的必要条件 - 它只是可能实现此目的的一种选择。

我想补充一点,您可能不应该直接在生产系统上试验更改。使用计划的重启作为预防措施,但仅限于应用您确定会起作用的更改时。当您的更改起作用时,取消计划的重启。

答案2

这是带外管理的一种情况,形式为ILO 或 DRAC 卡或远程 IP KVM?. 在您的场景中这是一个选项吗?

答案3

总是有自制的带外管理。获取第二个系统并通过串行电缆将其连接到服务器。在 ttyS0 或任何串行端口上运行 getty;这可让您通过串行端口登录。如果您使第二个系统可通过互联网访问,那么如果您将自己拒之门外,您就有另一条进入服务器的路径。

答案4

当带外管理不可用时,我会使用自己的脚本,该脚本高度依赖于服务器和我所调整的内容。

最常见的情况是更改远程路由器的防火墙。我启动一个屏幕会话然后运行:

./iptables.sh ;echo Rules applied;echo sleeping until flush...;sleep 5 && echo Sleeping 20 more seconds - rules worked if you\'re reading this press ctrl-c to cancel the flush && sleep 20 && ./iptables-flush.sh || echo Flush cancelled

因此 iptables.sh 包含我的新规则,而 iptables-flush.sh 包含一组基本规则,如果我搞砸了,这将允许我远程重新连接。我按下 ctrl-c 取消刷新,只有当规则没有断开我连接时我才能这样做。

因此,您只需要一个更详细的脚本。例如,如果您正在测试对网络接口的更改,则可以编写一个脚本并将其放在 rc.local 中。它会尝试 ping 几个不同的主机,如果其中任何一个失败,它应该复制旧的网络接口文件并重新启动。

或者脚本可以检查 ssh 日志 - 如果它没有看到您在 90 秒内登录,则恢复配置文件并重新启动。

所以简短的回答是,增加你的 bash-fu :-)

并想办法让带外管理发挥作用。这确实是正确的答案,我一直希望将其作为后备方案。例如,由于您有 ssh 访问权限(希望不仅限于您正在使用的机器),您可以使用 ssh 端口转发来绕过防火墙吗?

相关内容