来自开发背景,我习惯在东西上线之前进行自动化(单元)测试。现在我想对(新的)Linux(和一些 Windows)服务器和网络设备使用相同的方法。
我希望能够定义这些系统在上线之前应该通过的测试/条件,或者对实时主机运行测试以检查它们是否仍然符合我们的标准。
我想运行的测试超出了网络扫描。例如:
- 我想检查是否启用了 SSH,但不允许 root 登录并强制执行基于密钥的登录。
- 在打印机上,我想检查是否设置了某些 SNMP 社区。
- 在 linux 主机上,我想检查 ntp 设置
- 我希望能够在某些特定情况下定义自定义检查
您知道是否存在这样的自动化系统,哪个最能满足我的要求?或者我应该建立在现有的单元测试框架上吗?
这就是您使用监控的目的。有很多监控系统,具有不同的正面和负面影响,这里不是对不同选项进行详尽讨论的地方。原则上,您的监控应该代表您对系统所做的所有断言,包括输出和响应时间。我鼓励在我的团队中使用“监控优先的系统管理”,这与开发的相似之处应该是显而易见的。
现在,就像有些东西很难进行单元测试一样,也有一些东西很难监控。您的 SSH 示例就是其中之一——虽然您当然可以尝试登录,如果失败,则说您已经完成,但是很多事情可能会混淆您的测试——“尝试以 root 用户身份登录,密码失败”可能会被某人更改 root 密码并打开密码身份验证搞砸了
test123
——您不知道密码被设置成什么,所以您的测试登录当然会失败。对于这些,您需要一个配置管理系统,例如 Chef 或 Puppet。这些系统允许您有效地对系统状态做出断言(例如“
PasswordAuthentication
选项/etc/ssh/sshd_config
应设置为false
”),并且配置管理系统将确保每次运行时都是如此。好的系统还可以为您提供异常报告(“嘿,我想您可能想知道它PasswordAuthentication
已设置为true
;没关系,我已修复它,但您可能想打断某人的手指”)这样您就可以知道什么时候出现异常情况确实发生了。您也许可以使用Serverspec。它主要用于在目标主机上运行的测试 - 例如。检查文件是否存在/内容、已安装的软件包、使用的服务器端口。