网络运维工具–shell批量下发
此功能针对大批量设备下发相同命令比较实用,适配多个厂商,但多个厂商不能混用。
1、命令语法介绍:
1)采集命令一般无需处理,直接下发输入后下发即可。(实际为省略模式和回显匹配符调用默认值)
命令示例:display cur
(可写多行命令实现一次登录采集完成)
2)配置命令需要增加回显完成标识符和命令模式(用来保证配置下发的安全性和完整性)。
#### 命令示例1:`0_]^interface loopback 0`
#### 命令示例2:`1_]^interface loopback 0`
#### 命令示例3:`]^interface loopback 0`
命令分解:
符号^
之前为回显匹配模式和回显完成标识符, 符号^
之后为实际下发的命令。
匹配模式用数字 0
和 1
表示, 0
代表精确匹配,回显的最后字符必须要一致;1
表示模糊匹配,回显标识符只需要在回显内容中出现即可,不需要回显标识符必须在回显的最后位置。
回显标识符一般为命令执行完成最后
显示的最后一个字符,各厂商一般如下:
厂商 | 回显标识符 |
---|---|
H3C | > |
HW | > |
ruijie | # |
cisco | # |
<H3C-TEST-01>system-view
System View: return to User View with Ctrl+Z.
[H3C-TEST-01]
例如此命令执行完成后回显标识符为]
而并非>
命令按照实际要下发的命令敲即可
命令模式和回显标识符可以省略,省略情况下默认模式为精确匹配模式、回显匹配符为程序定义的默认标识符(默认信息可在配置文件中修改,看本文档配置文件部分)
2、融错语法
用来匹配可能会出现但不一定出现的情况,如从ftp下载文件时如文件不存在的情况下正常下载是没问题的,但当本地已经存在此文件时就会提示输入[Y/N]让用户判断,在此情况下可以使用该语法。
示例
ftp>
get G1
G1 already exists. Overwrite it? [Y/N]:Y
227 Entering Passive Mode (10,168,1,123,21,108)
150 Connection accepted.
.
226 Transfer complete.
3698 bytes received in 0.199 seconds (18.17 Kbytes/s)
ftp>
从双减号‘–’开始为python的字典格式,对应两个键值,建固定不可修改,值可修改。
键 | 值含义 | 举例 |
---|---|---|
incloude | 回显可能包含的字符串 | 如上代码所示在回显中包含[Y/N]: |
input | 匹配到可能包含的字符串后执行下发的字符串 | 包含[Y/N]: 的情况下输入Y |
示例1:配置接口ip
操作命令:
1_]^system-view
1_]^interface loopback 0
1_]^ip address 172.16.1.1 255.255.255.255
1_>^return
1_>^save fo
回显内容:
system-view
System View: return to User View with Ctrl+Z.
[H3C-TEST-01]interface loopback 0
[H3C-TEST-01-LoopBack0]ip address 172.16.1.1 255.255.255.255
[H3C-TEST-01-LoopBack0]return
<H3C-TEST-01>save fo
Validating file. Please wait...
Configuration is saved to device successfully.
<H3C-TEST-01>
示例2:从ftp下载文件到网络设备
操作命令:
0_> ^ftp 10.168.1.123--{'incloude':'(none)):;Password:','input':'admin;admin'}
0_> ^cd .
0_> ^get G1--{'incloude':'[Y/N]:','input':'Y'}
回显内容
ftp 10.168.1.123
Press CTRL+C to abort.
Connected to 10.168.1.123 (10.168.1.123).
220 Browser Ftp Server.
User (10.168.1.123:(none)): admin
331 Password required for this user.
Password:
230 User Logged In.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd .
250 CWD command successful.
ftp>
get G1
G1 already exists. Overwrite it? [Y/N]:Y
227 Entering Passive Mode (10,168,1,123,21,108)
150 Connection accepted.
.
226 Transfer complete.
3698 bytes received in 0.199 seconds (18.17 Kbytes/s)
ftp>
4、默认配置信息
软件才用python开发,默认配置信息定义在软件config/config.ini
文件ssh配置节点
使用字典方式表示,以厂商为节点,未在定义内的厂商可以自由添加,值解释如下
键 | 建含义 | 举例 |
---|---|---|
default_biaoshi | 当登录到交换机之后不输入任何命令的情况下回显的最后一个标志性字符串,部分设备可能会有存在不可见字符,如cisco在#后可能会存在一个空格,这个需要根据实际填写。 | > |
quit | 退出命令 | quit |
page | 交换机输出默认是做了分页显示,这个命令用来关闭分页 | screen-length disable |
error | 当命令报错之后出现的标志性字符串 | ‘^’,‘position’,‘found’ |
键和值的标识都应使用英文引号引用。
其他厂商内容如下所示,可修改适配自己的设备。第二个功能参数下发同样调用这部分内容,不需要重复定义。
[ssh]
public = {
'H3C':{
'default_biaoshi':'>',
'quit':'quit',
'page':'screen-length disable',
'error':['^','position','found']
},
'HW':{
'default_biaoshi':'>',
'quit':'quit',
'page':'screen-length 0 temporary',
'error':['^','position','found']
},
'ruijie':{
'default_biaoshi':'#',
'quit':'exit',
'page':'terminal length 0',
'error':['%','Incomplete','command']
},
'cisco':{
'default_biaoshi':'# ',
'quit':'exit',
'page':'terminal length 0',
'error':['%','command']
},
'tencent':{
'default_biaoshi':'> ',
'quit':'quit',
'page':'no page',
'error':['%','Unknown','command']
}
}