-
Notifications
You must be signed in to change notification settings - Fork 8
/
Readme
executable file
·181 lines (121 loc) · 7.06 KB
/
Readme
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
Introduction:
-------------
ciscocmd is a Tcl/Expect script.
With this tool, you can send a set of command to a large number of ios target hosts and get a separated report for each node.
I wrote this little tool to assists me when I must manage a lot of cisco switch for the same reason like find specific parameters under specific circumstances
like how is defined a QOS policy on interface where a lot of packets are dropped..
Usage:
------
ciscoscmd [OPTION]...
-h --help display this help message.
-u --username <username> define the username password.
-p --password <password> define the telnet password.
-s --secretpassword <enable password> define the enable secret password.
-t --target <host> define the hostname to connect.
-T --targetfile <file> define a target file (one host per line)
-c --cmd <cmd> define the command to send.
-C --cachecred use cache credentials $CISCOUSR $CISCOPW $CISCOSEC
-e --enable set mode enable.
-r --runfile <file> define a file with a set of command to send.
-l --log <file prefix> define a logfile prefix
-a --append log will be appended to existing file
-P --prefix add the host prefix to each line
-m --maxfork <number> define maximum forked process
-w --wait <seconds> define max wait time for the next prompt
-b --batchfile <file> define a batch file to process ciscocmd output
All ciscocmd output will be piped to this batch
-Y|--ssh Use ssh protocol to connect remote equipement
--sshopts set ssh specific option
-I --ignrorekey ignore host key for ssh protocol
-f --force force connection to next host if one connection fails
-d --debug <file> define a debug file name
-A --asa use ASA pager command: terminal pager 0
-W --wlc use WLC pager command: config paging disable
-D --datadump use Small Business pager command: terminal datadump 0
-z --width <chars> set terminal width (not for ASA)
-q --quiet set program very quiet
-h --help Print a quick help.
-u --username When your target use authentication new-model, a username is required to logon.
This option must be used to specify the username. The script will expect "ername" prompt
before sending the username.
ex: -u john
-s --secretpassword When you need to be in enable mode, you must specify the enable password.
ex: -s enablepassword
-t --target This option defines a target or a list of target for the script.
If you define a list, you must separate each host with a comma.
ex: -t myrouteur,myswitch
-T --targetfile This option defines a list where target are listed. On each line, one target must be written,
no more, no less.
ex: -T hostlist.txt
-c --cmd With this flag, you can pass the ios command to execute. Don't forget to use quote !!!
ex: -c "show version"
-C --cachecred This flag will use environment variables CISCOUSR as user, CISCOPW as password and CISCOCEC as secret.
-e --enable This flag turn enable mode on. If you use -s, this parameter is useless.
-r --runfile This parameter let you specify a file containing a set of command to enter on your target
ex: -r command.ios.txt
-l --log This option is used to define a prefix for logging the output of ciscocmd script. Each target,
will produce a logfile <targetname>.txt ( in forking mode ) but you may prefer to precede the filename with a custom a keyword
to this name like a date or anything else.
ex: -l version-request.
-a --append This parameter must be used if you want to append log instead of replacing old log files.
-P --prefix This option permit to add the target in the beginning of each line of the script's output.
-m --maxfork The default value is 4. You can if your machine is able to support more processing choose
a greater value like 10, 30 or more on a supercomputer..
ex: -m 10
-b --batchfile This parameter let you specify a custom script that will get as standard input
the result of the ciscocmd script. Additionally, the $CISCOHOST environmental
variable can be accessed by your script. CISCOHOST will give you the current target.
-z --width This will force the width to the specified value. Default value: 80.
-d --debug This option will produce a expect debug output in a file. If more than one target is
given, each target will produce a file <debugfilename>.target.debug
ex: -d mydebug
-w --wait This option define the maximum time in seconds to wait after each command during processing.
-q --quiet Be very quite and do not send any information on standard output.
-A --asa Use this option to use ASA's pager command: "terminal pager 0" instead of "terminal length 0".
-W --wlc Use this option to use WLC's pager command: "config paging disable" instead of "terminal length 0".
-Y --ssh This option will use ssh instead of telnet protocol to connect remote target(s)
--sshopts <sshopts> This option permit to add specific ssh options
ex: --sshopts "-2"
-I --ignorekey This command wil add ssh opion to ignore host key
-f --forcenext This option force connection to next host if one connection fails
Example:
--------
This tool can be used to retrieve information, put configuration.
Another powerful option is the ability to pipe each node output to your custom script. For example,
I suppose you need to check the configuration of all interfaces where you detect more than 1 reset and on a hundreds of nodes...
- Prepare a file with your hosts ( on per line ) and save it as mynodes.txt
- Prepare a batch file to pipe your output command and save it as "mybatch" :
--------------------------mybatch-------------------------------
#!/bin/sh
#
#mybatch
while read line
do echo "$line" | grep -q "line protocol" && IF=$(echo $line | awk '{print $1}')
echo "$line" | grep -q "reset" && (
ERROR=$(echo $line | sed -e 's/.*output.*, //g' -e 's/ interface resets.*//g')
if [ $ERROR -gt 1 ]
then
echo
echo "$IF have $ERROR resets !"
./ciscocmd -t $CISCOHOST -p <password> -s <password> -c "sh run int $IF"
fi
)
done
----------------------------------------------------------------
- launch
ciscocmd -T mynodes.txt -p <password> -s <enablepassword> -b ./mybatch -c "sh int"
you will have a hundred of text file ( one per node with the result of "sh run int" for all interfaces with more than one reset )
Remarks:
1. This example supposes you don't use authentication new model. If you use it do not forget to use -u <username> with ciscocmd
2. Another way to do the same thing is to use "include" command from ios and make a shorter mybatch script.
Important !!!!!
To use forking mechanism on Unix , you need tclx extension.
ciscocmd will try to load Tclx extension automatically
Development url:
----------------
https://github.com/eczema/ciscocmd-cosi/
Final Word:
-----------
This script is written/distributed under the GPL License Version 2.
For any comment, contact me at [email protected]
Alain Degreffe