diff options
Diffstat (limited to 'plugins/check_by_ssh.c')
-rw-r--r-- | plugins/check_by_ssh.c | 203 |
1 files changed, 104 insertions, 99 deletions
diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index 1211daa..8527b72 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c | |||
@@ -1,25 +1,19 @@ | |||
1 | /****************************************************************************** | 1 | /****************************************************************************** |
2 | * | 2 | |
3 | * This file is part of the Nagios Plugins. | 3 | The Nagios Plugins are free software; you can redistribute them |
4 | * | 4 | and/or modify them under the terms of the GNU General Public |
5 | * Copyright (c) 1999, 2000, 2001 Karl DeBisschop <karl@debisschop.net> | 5 | License as published by the Free Software Foundation; either |
6 | * | 6 | version 2 of the License, or (at your option) any later version. |
7 | * The Nagios Plugins are free software; you can redistribute them | 7 | |
8 | * and/or modify them under the terms of the GNU General Public | 8 | This program is distributed in the hope that it will be useful, but |
9 | * License as published by the Free Software Foundation; either | 9 | WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * version 2 of the License, or (at your option) any later version. | 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
11 | * | 11 | General Public License for more details. |
12 | * This program is distributed in the hope that it will be useful, but | 12 | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | 13 | You should have received a copy of the GNU General Public License |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 | along with this program; if not, write to the Free Software |
15 | * General Public License for more details. | 15 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
16 | * | 16 | |
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | * | ||
21 | * $Id$ | ||
22 | * | ||
23 | *****************************************************************************/ | 17 | *****************************************************************************/ |
24 | 18 | ||
25 | const char *progname = "check_by_ssh"; | 19 | const char *progname = "check_by_ssh"; |
@@ -27,7 +21,6 @@ const char *revision = "$Revision$"; | |||
27 | const char *copyright = "2000-2003"; | 21 | const char *copyright = "2000-2003"; |
28 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | 22 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
29 | 23 | ||
30 | #include "config.h" | ||
31 | #include "common.h" | 24 | #include "common.h" |
32 | #include "netutils.h" | 25 | #include "netutils.h" |
33 | #include "utils.h" | 26 | #include "utils.h" |
@@ -38,83 +31,10 @@ int validate_arguments (void); | |||
38 | void print_help (void); | 31 | void print_help (void); |
39 | void print_usage (void); | 32 | void print_usage (void); |
40 | 33 | ||
41 | void | ||
42 | print_help (void) | ||
43 | { | ||
44 | print_revision (progname, revision); | ||
45 | |||
46 | printf (_(COPYRIGHT), copyright, email); | ||
47 | |||
48 | printf (_("This plugin uses SSH to execute commands on a remote host\n\n")); | ||
49 | |||
50 | print_usage (); | ||
51 | |||
52 | printf (_(UT_HELP_VRSN)); | ||
53 | |||
54 | printf (_(UT_HOST_PORT), 'p', "none"); | ||
55 | |||
56 | printf (_(UT_IPv46)); | ||
57 | |||
58 | printf (_("\ | ||
59 | -1, --proto1\n\ | ||
60 | tell ssh to use Protocol 1\n\ | ||
61 | -2, --proto2\n\ | ||
62 | tell ssh to use Protocol 2\n\ | ||
63 | -f\n\ | ||
64 | tells ssh to fork rather than create a tty\n")); | ||
65 | |||
66 | printf (_("\ | ||
67 | -C, --command='COMMAND STRING'\n\ | ||
68 | command to execute on the remote machine\n\ | ||
69 | -l, --logname=USERNAME\n\ | ||
70 | SSH user name on remote host [optional]\n\ | ||
71 | -i, --identity=KEYFILE\n\ | ||
72 | identity of an authorized key [optional]\n\ | ||
73 | -O, --output=FILE\n\ | ||
74 | external command file for nagios [optional]\n\ | ||
75 | -s, --services=LIST\n\ | ||
76 | list of nagios service names, separated by ':' [optional]\n\ | ||
77 | -n, --name=NAME\n\ | ||
78 | short name of host in nagios configuration [optional]\n")); | ||
79 | |||
80 | printf (_(UT_WARN_CRIT)); | ||
81 | |||
82 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
83 | |||
84 | printf (_("\n\ | ||
85 | The most common mode of use is to refer to a local identity file with\n\ | ||
86 | the '-i' option. In this mode, the identity pair should have a null\n\ | ||
87 | passphrase and the public key should be listed in the authorized_keys\n\ | ||
88 | file of the remote host. Usually the key will be restricted to running\n\ | ||
89 | only one command on the remote server. If the remote SSH server tracks\n\ | ||
90 | invocation agruments, the one remote program may be an agent that can\n\ | ||
91 | execute additional commands as proxy\n")); | ||
92 | |||
93 | printf (_("\n\ | ||
94 | To use passive mode, provide multiple '-C' options, and provide\n\ | ||
95 | all of -O, -s, and -n options (servicelist order must match '-C'\n\ | ||
96 | options)\n")); | ||
97 | } | ||
98 | |||
99 | |||
100 | |||
101 | |||
102 | |||
103 | void | ||
104 | print_usage (void) | ||
105 | { | ||
106 | printf (_("Usage:\n\ | ||
107 | check_by_ssh [-f46] [-t timeout] [-i identity] [-l user] -H <host> -C <command>\n\ | ||
108 | [-n name] [-s servicelist] [-O outputfile] [-p port]\n\ | ||
109 | check_by_ssh -V prints version info\n\ | ||
110 | check_by_ssh -h prints more detailed help\n")); | ||
111 | } | ||
112 | |||
113 | |||
114 | int commands = 0; | 34 | int commands = 0; |
115 | int services = 0; | 35 | int services = 0; |
116 | char *remotecmd = ""; | 36 | char *remotecmd = NULL; |
117 | char *comm = SSH_COMMAND; | 37 | char *comm = NULL; |
118 | char *hostname = NULL; | 38 | char *hostname = NULL; |
119 | char *outputfile = NULL; | 39 | char *outputfile = NULL; |
120 | char *host_shortname = NULL; | 40 | char *host_shortname = NULL; |
@@ -123,20 +43,26 @@ int passive = FALSE; | |||
123 | int verbose = FALSE; | 43 | int verbose = FALSE; |
124 | 44 | ||
125 | 45 | ||
46 | |||
47 | |||
48 | |||
49 | |||
126 | int | 50 | int |
127 | main (int argc, char **argv) | 51 | main (int argc, char **argv) |
128 | { | 52 | { |
129 | 53 | ||
130 | char input_buffer[MAX_INPUT_BUFFER]; | 54 | char input_buffer[MAX_INPUT_BUFFER]; |
131 | char *result_text = ""; | 55 | char *result_text; |
132 | char *status_text; | 56 | char *status_text; |
133 | char *output = ""; | 57 | char *output; |
134 | char *eol = NULL; | 58 | char *eol = NULL; |
135 | int cresult; | 59 | int cresult; |
136 | int result = STATE_UNKNOWN; | 60 | int result = STATE_UNKNOWN; |
137 | time_t local_time; | 61 | time_t local_time; |
138 | FILE *fp = NULL; | 62 | FILE *fp = NULL; |
139 | 63 | ||
64 | asprintf (&remotecmd, "%s", ""); | ||
65 | asprintf (&comm, "%s", SSH_COMMAND); | ||
140 | 66 | ||
141 | /* process arguments */ | 67 | /* process arguments */ |
142 | if (process_arguments (argc, argv) == ERROR) | 68 | if (process_arguments (argc, argv) == ERROR) |
@@ -235,6 +161,7 @@ main (int argc, char **argv) | |||
235 | 161 | ||
236 | 162 | ||
237 | 163 | ||
164 | |||
238 | /* process command-line arguments */ | 165 | /* process command-line arguments */ |
239 | int | 166 | int |
240 | process_arguments (int argc, char **argv) | 167 | process_arguments (int argc, char **argv) |
@@ -392,3 +319,81 @@ validate_arguments (void) | |||
392 | 319 | ||
393 | return OK; | 320 | return OK; |
394 | } | 321 | } |
322 | |||
323 | |||
324 | |||
325 | |||
326 | |||
327 | |||
328 | void | ||
329 | print_help (void) | ||
330 | { | ||
331 | print_revision (progname, revision); | ||
332 | |||
333 | printf (_("Copyright (c) 1999 Karl DeBisschop <kdebisschop@users.sourceforge.net>\n")); | ||
334 | printf (_(COPYRIGHT), copyright, email); | ||
335 | |||
336 | printf (_("This plugin uses SSH to execute commands on a remote host\n\n")); | ||
337 | |||
338 | print_usage (); | ||
339 | |||
340 | printf (_(UT_HELP_VRSN)); | ||
341 | |||
342 | printf (_(UT_HOST_PORT), 'p', "none"); | ||
343 | |||
344 | printf (_(UT_IPv46)); | ||
345 | |||
346 | printf (_("\ | ||
347 | -1, --proto1\n\ | ||
348 | tell ssh to use Protocol 1\n\ | ||
349 | -2, --proto2\n\ | ||
350 | tell ssh to use Protocol 2\n\ | ||
351 | -f\n\ | ||
352 | tells ssh to fork rather than create a tty\n")); | ||
353 | |||
354 | printf (_("\ | ||
355 | -C, --command='COMMAND STRING'\n\ | ||
356 | command to execute on the remote machine\n\ | ||
357 | -l, --logname=USERNAME\n\ | ||
358 | SSH user name on remote host [optional]\n\ | ||
359 | -i, --identity=KEYFILE\n\ | ||
360 | identity of an authorized key [optional]\n\ | ||
361 | -O, --output=FILE\n\ | ||
362 | external command file for nagios [optional]\n\ | ||
363 | -s, --services=LIST\n\ | ||
364 | list of nagios service names, separated by ':' [optional]\n\ | ||
365 | -n, --name=NAME\n\ | ||
366 | short name of host in nagios configuration [optional]\n")); | ||
367 | |||
368 | printf (_(UT_WARN_CRIT)); | ||
369 | |||
370 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
371 | |||
372 | printf (_("\n\ | ||
373 | The most common mode of use is to refer to a local identity file with\n\ | ||
374 | the '-i' option. In this mode, the identity pair should have a null\n\ | ||
375 | passphrase and the public key should be listed in the authorized_keys\n\ | ||
376 | file of the remote host. Usually the key will be restricted to running\n\ | ||
377 | only one command on the remote server. If the remote SSH server tracks\n\ | ||
378 | invocation agruments, the one remote program may be an agent that can\n\ | ||
379 | execute additional commands as proxy\n")); | ||
380 | |||
381 | printf (_("\n\ | ||
382 | To use passive mode, provide multiple '-C' options, and provide\n\ | ||
383 | all of -O, -s, and -n options (servicelist order must match '-C'\n\ | ||
384 | options)\n")); | ||
385 | } | ||
386 | |||
387 | |||
388 | |||
389 | |||
390 | |||
391 | void | ||
392 | print_usage (void) | ||
393 | { | ||
394 | printf (_("\n\ | ||
395 | Usage: %s [-f46] [-t timeout] [-i identity] [-l user] -H <host> \n\ | ||
396 | -C <command> [-n name] [-s servicelist] [-O outputfile] [-p port]\n"), | ||
397 | progname); | ||
398 | printf (_(UT_HLP_VRS), progname, progname); | ||
399 | } | ||