summaryrefslogtreecommitdiff
path: root/lib/ssh-forcecommand
blob: 16e04c53087c828822abd4a48fa6bf8b1d8cb1bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env perl
# Copyright © 2010 by Daniel Friesel <derf@finalrewind.org>
# License: WTFPL:
#   0. You just DO WHAT THE FUCK YOU WANT TO.
#
# SSH forcecommand to be used for nagios ssh checks etc.
# Example line for ssh authorized_keys file:
# command="/usr/local/lib/nagios/forcecommand /etc/nagios/forcecommand.cfg",no-agent-forwarding,no-port-forwarding,no-pty,no-X11-forwarding $key
#
# Configfile format:
# ssh_command = real_command
# Example:
# check_users = /usr/lib/nagios/plugins/check_users -w 5 -c 10

use strict;
use warnings;

my $conffile = shift or die("Usage: $0 <configfile>\n");
my %commands;
my $input = $ENV{'SSH_ORIGINAL_COMMAND'} or die("No command\n");;

open(my $conf, '<', $conffile) or die("Can't open $conffile: $!\n");

while (my $line = <$conf>) {
	my ($key, $value) = split(/ \s* = \s* /x, $line);
	if ($key and $value) {
		$commands{$key} = $value;
	}
}
close($conf) or die("Cannot close $conffile: $!\n");

if (exists $commands{$input}) {
	exec($commands{$input});
	exit 1;
}

die("Unknown command\n");