当我要改变一个远程服务器的networkingconfiguration时,我正在考虑一些安全机制来保护我,防止意外失去对服务器的控制权。
我正在使用的0级保护是预定的系统重启:
# at now+x minutes > reboot > ctrl+D
其中x是重启之前的延迟。
虽然这个方法非常适用于像iptables这样的非常简单的任务,但是这个方法至less有两个缺点:
你们是否使用了第二点的工具? 如果在重新引导后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端口转发来绕过防火墙吗?