陈 军,张伟刚,黄 立
(湖州电力局,浙江 湖州313000)
随着国家电网公司智能电网战略的逐步推进、公司信息化水平的不断提升,办公自动化、生产信息化对信息系统的依赖程度越来越高,同时对信息系统的可靠性要求也与日俱增.信息网络是信息系统的基础,可靠的信息网络才能支撑信息系统健康、稳定的运行.
信息网络运行过程中,设备硬件故障是一个潜在的、不可消除的且随时可能发生的风险.因此,在平时运维工作中需要定期对网络设备的配置文件等相关信息进行备份,以便在设备故障时将备份导入相同型号的备品备件,使用备品备件替换故障设备,实现网络设备故障快速抢修,提高网络可用率.
本文介绍一种基于TFTP服务的网络设备自动集中备份工具及实现方法,帮助网络管理员提高工作效率.
目前,网络设备备份最常用的一种方法是利用TFTP协议将物理位置分散的在线运行网络设备的相关信息(主要是配置文件)集中传输至服务端,然后将收集到的备份文件转移存放到其他可永久保存的存储介质中(如移动硬盘、光盘等).下面以备份思科交换机的配置文件为例介绍该方法的实现过程,其主要分为部署TFTP服务、执行备份命令和存放配置文件三个步骤.
可以使用Windows操作系统常用的TFTP 软件(如3CDaemon)部署TFTP 服务.假设TFTP 服务地址为10.147.158.45,登陆到思科交换机上使用“ping 10.147.158.45”命令,测试交换机与TFTP服务器之间的网络联通状况,确保交换机能正常访问TFTP服务器.
登陆目标交换机,使用“enable”命令进入特权模式,执行“copy starup-config tftp”命令,进行配置文件备份操作.命令执行结果如图1所示,配置文件已成功上传,大小6167bytes,耗时0.067秒.其中,Address or name of remote host表示TFTP服务器的地址,Destination filename表示上传到服务器根目录的配置文件的文件名.
在专用的存储介质中,按照“年度/季度/网络设备分级/网络设备名称”的方式创建文件夹,以便下次使用时能快速找到,如图2所示.将上一步备份的配置文件s01-hz-xdl-2-3560-confg从TFTP服务的根目录复制到指定目录下长期保存.
浙江省湖州电力局目前在运核心层、汇聚层和接入层网络设备近300台.按照上述方法,如果采用手工方式逐台登录设备且仅进行配置文件备份,以网络管理员每天备份100台计算,需要3个工作日才能完成所有设备的备份工作,不但重复劳动工作量大而且准确性也难以保证.基于上述现状,网络管理员需要一个能将上述备份过程自动化的工具,实现自动集中备份所有在线运行网络设备的配置文件、运行信息和操作系统(IOS文件),提高工作效率和备份数据的准确性.
实现网络设备快速自动集中备份,需要先将网络设备进行归类整理并统计每台设备的一些属性;根据上述信息,利用SSH 协议或Telnet协议进行远程登录,向设备推送备份命令,待命令执行完成后退出登陆设备,最后将备份至TFTP服务端根目录的备份文件归类存放.
实现自动备份的前提是对网络设备进行归类梳理.首先,不同品牌的设备使用利用TFTP方式备份的命令各有区别;其次,执行备份命令必须先登录设备,而相同品牌的设备因操作系统版本不同支持的远程登录方式也不同.
3.1.1 备份命令
目前浙江省湖州电力局的网络设备主要有三种品牌CISCO、H3C 和Foundry.以下是针对这三种品牌设备的备份命令说明.
(1)CISCO 备份命令.
“copy startup-config tftp://IP/文件名”
(2)H3C备份命令.
“tftp IP put startup.cfg”
(3)Foundry备份命令.
“copy startup-config tftp IP文件名”
这些命令必须在特权模式下执行,其中IP 为TFTP 服务器的IP 地址,文件名为将配置文件上传至TFTP服务器根目录下保存的文件名.
3.1.2 登录方式
自动备份命令都需要在特权模式下执行,即首先需要远程登录网络设备.因为操作系统版本的差异,远程登录方式根据支持协议的不同主要分为两种:Telnet和SSH.
(1)Telnet.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式[1].现有网络设备一般都支持Telnet,但是因为该协议的联机会话采用明文传输信息,包括用户名和密码,因此安全性较差.
(2)SSH.SSH 是Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定.SSH 是建立在应用层和传输层基础上的安全协议,是目前较为可靠,且专为远程登录会话和其它网络服务提供安全性的协议[2].到目前为止,有两个不兼容的版本——SSH1和SSH2.虽然SSH 是替代Telnet和其他远程控制台管理应用程序的行业标准,但并不是所有的设备都支持,一些型号较老的设备不支持SSH,有些虽然支持SSH 但仅仅支持SSH1.
3.1.3 分类统计
利用Excel表格工具将在线运行的网络设备按照核心层、汇聚层和接入层以不同的工作表进行分类存放,每台设备统计9个属性供自动备份时使用,如图3所示.每个属性的用途解释如下:
备份:指示该设备是否需要执行自动备份,1表示执行,0表示不执行.
描述:设备的中文描述,自动备份时会自动创建以该描述为名称的文件夹,用于存放该设备的备份文件.
主机名:设备的hostname信息,在自动备份时用于判断命令何时执行完成.
管理地址:设备的管理IP地址(交换机一般为Vlan地址,路由器一般为LookBack地址),远程登录设备时需要.
登陆:远程登录该设备采用的协议,自动备份工具支持Telnet、SSH1和SSH2三种.
品牌:设备的品牌,目前支持的设备有CISCO、H3C和Foundry三种.
账户:远程登录使用的用户名.
密码:远程登录使用的密码.
特权密码:备份命令需要在特权模式下运行,需要使用特权密码进入该模式.
3.2.1 Excel文件读取
Windows操作系统的.Net开发平台提供了System.Data.OleDb命名空间的一些功能强大的类,可以将Excel文件看成普通数据库进行处理.
使用OleDbConnection类可以连接到Excel文件,它将Excel文件中的每个工作表看成数据库的Table,将工作表中的每一行看作数据库的Record.用于建立连接字符串为:“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件名;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'”.其中,文件名为Excel文件的全名(包括路径),HDR=Yes表示过滤标题行,IMEX=1表示将混合型作为文本型读取,避免空值.
使用OleDbDataAdapter类可以用来执行SQL 语句.如果是查询语句,可以使用OleDbDataAdapter类Fill方法将查询结果载入DataTable或DataSet内存数据结构中,供程序处理.
3.2.2 远程登录
自动备份程序的核心就是利用SSH 协议或Telnet协议对设备进行远程登录,然后向其推送备份命令.对SSH 和Telnet两种客户端协议的编程实现难度和工作量都非常大,但我们没有必要重复“造轮子”,可以在互联网上(如SouceForge、Codeplex等网站)找到开放源代码的相关库,直接引入到程序中使用,必要时还可以对其进行适当的源代码改造.
Tamir Gal开发的SharpSSH 是一个纯.NET 开发环境实现的支持SSH 客户端协议的套件,非常好用,下载地址为http://www.tamirgal.com.
Telnet的本质就是scoket,因为没有涉及到加密和认证,用.NET 平台提供的TcpClient、TcpListner类就可实现.在codeplex上有一个TelnetCSharp库,虽然版本有点老,但非常好用,下载地址为http://telnetcsharp.codeplex.com.
3.2.3 判断命令结束
实现程序自动执行命令需要解决的另一个问题是判断命令何时执行完成.根据命令执行过程中会向登录客户端主动返回运行信息这一事实.目前常用的方法是:向设备推送命令后,在客户端接收缓存区中查找特定的字符串,找到则表示命令执行完成.查找的字符串是命令执行结束后必然出现的,例如,一台主机名为“Swith”的交换机,在特权模式下运行完命令后,最后一行一定会出现“Swith#”.
为了防止死等现象,必须同步设置超时机制,当特定字符串超过时限还未出现时,认为命令执行失败,强制结束命令.由于不同命令执行时间各不相同,超时限需要在推送命令时根据实际情况进行设置,默认情况下为2秒.
在命令执行过程中,客户端接收缓存区是实时更新的,所以在时限范围内需要不停地检查特定的字符串是否出现.为了避免循环检查消耗过多的CPU 时间,需要设置一个两次检查之间的时间间隔,默认情况下为500毫秒,即做完一次检查没有发现特定的字符串,让出CPU 时间500毫秒后,才能再一次发起检查.
在网络设备归类统计完成的基础上,即可以利用程序实现备份工作的自动化,程序必须与TFTP服务程序部署在同一台计算机上,流程如图4所示.
程序首先通过检查UDP协议69端口是否处于侦听状态,判断TFTP服务是否开启,若TFTP服务异常则结束程序.接着连接到设备统计EXCEL文件,逐条读取网络设备属性信息进入自动备份流程.
备份流程首先根据设备的品牌和登录协议创建不同类型的备份实例,因为备份命令因设备品牌而异,并且登录协议因设备操作系统而异.备份实例一共有六种,分别是:
(1)Cisco_SSH_Robot,用于支持SSH 协议的思科设备.
(2)SSHCisco_Telnet_Robot,用于仅支持Telnet协议的思科设备.
(3)H3C_SSH_Robot,用于支持SSH 协议的华为3COM 设备.
(4)H3C_Telnet_Robot,用于仅支持Telnet协议的华为3COM 设备.
(5)Foundry_SSH_Robot,用于支持SSH 协议的华为Foundry设备.
(6)Foundry_Telnet_Robot,用于仅支持Telnet协议的华为Foundry设备.
备份实例选定后,依次进行登陆设备、进入特权模式和执行备份命令的操作.在这三步操作过程中,如有错误发生,则在记录失败日志后,流转至下一个设备的备份工作中.其中,进入特权模式和执行备份命令两步操作出错后还需要进行退出登陆操作,及时断开与网络设备的连接.
如果执行备份命令成功,还需要进行最后一步操作,即将备份到TFTP根目录的备份文件存放至专用移动硬盘的特定目录.程序会按照“年度/季度/网络设备分级/网络设备名称”的规则自动创建文件夹.转存操作完成后,退出登陆设备,记录成功日志后,流转至下一个设备的备份工作.
最后,设备统计文件中的所有记录按照此流程操作完毕后,程序执行结束,所有网络设备的备份工作完成.
程序运行界面截图如图5所示.程序支持三种备份项目,分别是配置文件、运行信息和操作系统(即IOS文件),在备份选项中可以按照需要进行勾选.在TFTP地址栏中填写TFTP服务器地址,由于同机部署,可以通过“获取”按键自动捕获本机的IP 地址.在TFTP根目录栏中填写TFTP根目录的路径,以便程序能找到从交换机备份过来的备份文件进行分类转存.在配置文件栏中填入EXCEL 文件全名(包括路径),以便程序取得网络设备的信息.
在备份过程中,文本框中会动态显示程序执行过程中每个网络设备的自动备份结果.如果某个设备自动备份失败,可以通过“错误日志”按钮调取详细的错误日志进行原因分析.
本工具作为电力系统现有信息网络运维手段的一个有效补充,可方便地部署在管理员办公电脑上,在无人值守的条件下自动、高效地集中备份在线运行网络设备的配置文件、运行信息和操作系统.
浙江省湖州电力局投运以来,原本需要花费网络管理员3个工作日才能完成的工作,现可在网络空闲时段(如下班后)让该工具自动完成,解放了网络管理员的生产力,提高了工作效率,取得了良好的效果.
[1]百度百科.Telnet协议[EB/OL].2013-04-20.http://baike.baidu.com/view/44255.htm.
[2]百度百科SSH 协议[EB/OL].2013-04-20.http://baike.baidu.com/view/16184.htm.