在Linux上进行远程networking干预的死人开关

当我要改变一个远程服务器的networkingconfiguration时,我正在考虑一些安全机制来保护我,防止意外失去对服务器的控制权。

我正在使用的0级保护是预定的系统重启:

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

其中x是重启之前的延迟。

虽然这个方法非常适用于像iptables这样的非常简单的任务,但是这个方法至less有两个缺点:

  • 这不是非常react native的,例如,如果自动远程ssh命令失败在x秒内不再工作,则应该自动检测到连接问题。
  • 如果需要修改某些configuration文件,然后重新启动以testing更改,则显然可能无法正常工作。

你们是否使用了第二点的工具? 如果在重新引导后X分钟无法join服务器,我希望能够恢复之前已知的稳定状态的系统configuration。

谢谢!

编辑:

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

  • 我只能访问这个特定的服务器,在防火墙后面。 所有端口都被过滤,除了端口22(ssh)。 所以没有KVM切换器,没有iDRAC等

  • 如果发生严重故障,我可以在本机上进行本地支持,但这需要花费太多时间:驾车到达目的地需要三个小时。 而且我这次花费在serverfault上,或者开发我自己的工具来避免去那里。

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

如果没有其他连接方法,比如ewwhite提出的方法,我认为你的方法很好。 这很简单,你可以给自己足够的时间,你觉得有必要。

注 – 我不认为你应该重新启动服务器来validation你的改变 – 如果绝对必要,重新启动相应的服务。 重新启动没有必要“locking”更改 – 这只是一个可能实现的选项。

我想补充一点,你可能不应该直接在生产系统上试验变化。 作为预防措施,请使用计划重新启动,但只有在应用更改时,您才能确定。 当您的更改工作时,取消预定的重启。

这是以ILO或DRAC卡或远程IP KVM的forms进行带外pipe理的情况。 这是你的scheme中的一个选项?

总是有自制的带外pipe理。 获取第二个系统并通过串行电缆将其连接到服务器。 在ttyS0或任何串口上运行getty; 这可以让你通过串口login。 如果你通过互联网使第二个系统可以访问,那么如果你把自己关在外面,你就有了另一个进入服务器的path。

当带外pipe理不可用时,我将自己的脚本高度依赖于服务器和我调整的脚本。

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

 ./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取消冲洗,我只能做,如果规则没有断开我。

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

或者,也许脚本可以检查SSH日志 – 如果它没有看到你用90秒login,恢复configuration文件,并重新启动。

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

并找出一种方法来让带外pipe理工作。 这真的是一个正确的答案,我一直希望作为一个回落。 例如,因为你有ssh访问(希望不仅仅是你正在使用的机器),你可以使用ssh端口转发来绕过防火墙吗?