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