#!/usr/bin/env ruby #check_config_dev v0.61 #!/usr/bin/env ruby # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Copyright Alain Pernelle # Project: www.alpern.free.fr # Website: http://www.alpern.free.fr # Quick documentation: use -h option # TODO # - keep name of save file with date. #Utilisation: #./check_cisco_dev_v0.61.rb -H -u -p -f -o [-s ssh] # os can be ios, catos, h3c, enterasys # -h, --help Print detailed help screen #version 0.2 08/14/2009 add support of catos h3c enterasys network devices # need device was setting with username and password # Bug with Cisco Device Special password charatere #not completely tested # it' seems some version of ssh v1.5 are not supported by net/ssh/telnet (update your device) require 'date' require 'thread' require 'rubygems' require 'optiflag' require 'net/telnet' require 'net/ssh/telnet' now = DateTime.now mois = now.month annee = now.year jour= now.day # Gestion des options de ligne de commande # puts "cisco_check_config_v0.1 by alpern www.alpern.free.fr" module Example extend OptiFlagSet usage_flag "h","help","?" flag "H" do long_form "Host" description "Host, Cible Equipement Cisco " end flag "u" do long_form "username" description "username " end flag "p" do long_form "password" description "password " end flag "f" do long_form "enable" description "enable password " end optional_flag "c" do long_form "critical" description "--critical, default 60, Critical time (s)" end flag "o" do long_form "os" description "--Operating System,values, ios,catos, h3c " value_in_set ["ios","catos","h3c","enterasys"] end optional_flag "s" do long_form "secure" description "ssh connection mode" value_in_set ["ssh"] end optional_switch_flag "e" do description "extended mode, see the documentation" end and_process! end # GET THE ARGV VALUES if ARGV.flags.e? EXTENDED=1 else EXTENDED=0 end # Get Require Arguments username=ARGV.flags.u password=ARGV.flags.p enablepassword=ARGV.flags.f peer=ARGV.flags.H os=ARGV.flags.o # Get Optional arguments if ARGV.flags.c? timeCritical=ARGV.flags.c.to_f else timeCritical=60 end if ARGV.flags.s? mode=ARGV.flags.s end begin fichier=(peer) directory="/var/log/nagios/" # choix des prompt et commandes specifiques a chaque type d'equipement case os when "catos" login_prompt = /[: ]*\z/n password_prompt = /[: ]*\z/n prompt = /> /n mode_privilege = 'enable' display_config = 'show conf' terminal_lenght = 'set length 0' when "ios" login_prompt = /[: ]*\z/n password_prompt = /[: ]*\z/n prompt = /[#>]/n mode_privilege = 'enable' display_config = 'show conf' terminal_lenght = 'term leng 0' when "h3c" login_prompt = /Username:/ password_prompt = /Password:/ prompt = /[>]/ mode_privilege = 'super' display_config = 'dis curr' terminal_lenght = 'screen-length disable' when "enterasys" login_prompt = /Username:/ password_prompt = /Password:/ prompt = /[>]/ mode_privilege = '/n' display_config = 'show conf' terminal_lenght = 'set length 0' end # localhost.login(username,password) { |c| print c } # Si le switches ou le router propose directement de taper le password # if username == password # localhost.waitfor(/[U]nk/n) # else # end # sortir les commandes de connexions # commun à tous les équipements # connexion a l'equipement para = { "Name" => username, "Password" => password, "LoginPrompt" => login_prompt, "PasswordPrompt" => password_prompt } if mode == "ssh" localhost = Net::SSH::Telnet.new("Host" => peer, "Username" => username, "Password" => password, "Prompt" => prompt ) else localhost = Net::Telnet::new("Host" => peer, "Timeout" => 25, "Prompt" => prompt ) localhost.login(para) end localhost.puts(mode_privilege) localhost.cmd(enablepassword) localhost.cmd(terminal_lenght) line = localhost.cmd(display_config) if mode == "ssh" localhost.cmd("quit") else localhost.cmd("quit") localhost.close end # Code de retour vers Nagios voir si line est vide if line totalSize=line.length SortieFile = File.new(directory+fichier +"_"+jour.to_s+"-"+mois.to_s+"-"+annee.to_s+".confg", "w") SortieFile.puts(line) SortieFile.close retCode=0 retCodeLabel="OK" puts "#{retCodeLabel}"+"|"+"size="+"#{totalSize}"+"B" exit retCode else retCode=2 retCodeLabel="Critical" puts "#{retCodeLabel}" exit retCode end rescue SystemCallError retCode=2 retCodeLabel="Critical" print "#{retCodeLabel}" print "Erreur dans le programe" exit retCode ## print the script result for nagios ############################################################### print "#{retCodeLabel}" exit retCode end