远程检查只读文件系统

远程检查只读文件系统

我需要定期远程检查许多服务器上的 Linux 文件系统是否以只读方式挂载。在这种情况下,我唯一可以使用的工具是常用的 CLI 脚本语言 (BASH/Perl/Python)、SSH 和 SNMP。

我目前的想法是:

  • 共享 SSH 密钥并远程执行 mount 命令,在给定的挂载点上搜索 RO 标志。
  • 通过 SNMP 检查,尽管我不确定这些信息是否可用或者检查起来有多么简单。
  • 尝试通过 SCP 传输文件,或者远程接触文件。

SNMP 方法是我能想到的最好/最干净的方法,但是我不知道如何做到这一点,因为 CLI SNMP 似乎是一场噩梦,特别是如果我需要运行一个决策过程来根据给定的挂载点找到索引。

理想情况下,我希望仅使用 BASH(包括 sed/awk/grep 等)和 SNMP 来实现这一点,但需要一些关于从哪里开始的指导! snmpd 已在所有相关服务器上安装并配置为 v2。

该脚本的最终用途是作为 Nagios 命令。

在此先非常感谢您的帮助!

笔记 我们已经设置了 cacti/nagios 来监控 100 多台服务器,我最初发帖时忘记提到这一点了!

答案1

在您的snmpd.conf检查中,查看 exec 参数。我使用它来远程轮询我的一些 IRC 服务器的用户数,如下所示:

exec usercount-irc /home/irc/usercount-irc.sh

要对此进行轮询,您可以使用 snmpwalk .1.3.6.1.4.1.2021.8,并将获得如下内容:

# snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.8

UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
UCD-SNMP-MIB::extNames.1 = STRING: usercount-irc
UCD-SNMP-MIB::extCommand.1 = STRING: /home/irc/usercount-irc.sh
UCD-SNMP-MIB::extResult.1 = INTEGER: 0
UCD-SNMP-MIB::extOutput.1 = STRING: 558
UCD-SNMP-MIB::extErrFix.1 = INTEGER: 0
UCD-SNMP-MIB::extErrFixCmd.1 = STRING:

检查扩展代理功能部分http://linux.die.net/man/5/snmpd.conf了解更多详情!

编辑1:
UCD-SNMP-MIB:dskTable 包含有关已安装卷和使用情况的信息。它位于 OID .1.3.6.1.4.1.2021.9 下,记录在以下位置:
http://www.oidview.com/mibs/2021/UCD-SNMP-MIB.html
http://www.net-snmp.org/docs/mibs/ucdavis.html#dskTable

但我现在发现它不包含 mountflags,所以你看不到只读。啊。回到上面的脚本以及如何调用它!:P

答案2

对于大多数“如何在 nagios 中执行 X?”,您会发现有人已经编写了一个插件,可以满足您的全部或至少部分需求。

在这种情况下,您可能可以将 check_ro_mounts 与“negate”插件(标准 nagios 插件的一部分)结合使用,或者只是修改它以满足您的需要:

http://exchange.nagios.org/directory/Plugins/Uncategorized/Operating-Systems/Linux/check_ro_mounts/details

答案3

另一种方法是使用 Perl、Ruby 的 Net::SSH 或 Python 的 paraminko 库进行远程登录(无需事先设置密钥),然后解析“mount”命令的内容。

答案4

可以通过 Puppet 来管理和确认挂载点及其标志。请参阅如何从 puppet 管理已挂载的分区(fstab + 挂载点)

相关内容