ssh-wrapper-for-monitoring/ssh-wrapper.py
2020-02-22 13:34:10 +01:00

55 lines
1.8 KiB
Python
Executable file

#!/usr/bin/env python
import os
import re
import shlex
import subprocess
import sys
allowed = [
##### System informations
r'^/usr/bin/lsb_release\s+-d$', # Linux
r'^/(usr/)?bin/uname\s+-mrs$', # Linux, BSD & others
r'''^/(usr/)?s?bin/awk -F'"' (-e\s*)?'/PRETTY_NAME/{ print \$2; }' /etc/os-release''', # Linux: /etc/os-release via awk for get_os.py
##### Complete command lines (Monitoring-Plugins on Debian)
r'^/usr/lib/nagios/plugins/check_disk -w \d+% -c \d+% -p /[/a-z]*$',
r'^/usr/lib/nagios/plugins/check_load -w \d+(,\d+,\d+)? -c \d+(,\d+,\d+)?$',
r'^/usr/lib/nagios/plugins/check_mysql -u [a-z]+ -p [0-9a-zA-Z]+',
r'^/usr/lib/nagios/plugins/check_mysql_health --user(name)?=[a-z]+ --pass(word)?=[0-9a-zA-Z]+ --mode=[a-z-]+$',
##### Simplified/combined (and a little bit less secure)
### most Linux distributions (with "sudo" and "doas")
# r'^/usr/lib(64)?/(nagios/plugins|monitoring-plugins)/check_',
# r'^sudo\s+/usr/lib(64)?/(nagios/plugins|monitoring-plugins)/check_',
# r'^doas\s+/usr/lib(64)?/(nagios/plugins|monitoring-plugins)/check_',
### *BSD (with "sudo" and "doas")
# r'^/usr/local/libexec/nagios/check_',
# r'^sudo\s+/usr/local/libexec/nagios/check_',
# r'^doas\s+/usr/local/libexec/nagios/check_',
]
cmdline = os.getenv('SSH_ORIGINAL_COMMAND')
if not cmdline:
print 'This is just a wrapper, no command specified!'
sys.exit(3)
for maybe in allowed:
if re.match(maybe, cmdline):
cmdline = shlex.split(cmdline)
try:
cmd = subprocess.Popen(cmdline, stdout=subprocess.PIPE)
except Exception, exc:
print 'Could not execute plugin ("%s"): %s' % (' '.join(cmdline), exc)
sys.exit(3)
else:
print cmd.communicate()[0].rstrip()
sys.exit(cmd.returncode)
print '%s: No allowed command found!' % sys.argv[0]
sys.exit(3)