EricaYue 2010-12-19
一、想法背景
目前公司需要管理的CISCO交换机数目较多,手动备份交换机配置文件较为繁琐,有时间还忘记了备份。一旦交换机出故障,再加上没有备份配置文件的话,恢复起来就困难了。
手工备份一台交换机配置文件步骤一般如下:
1.在自己的电脑上运行TFTP服务器端;
2.telnet到cisco交换机
3.使用copy startup-config tftp: 等命令上传config文件到TFTP服务器上。
可不可以在linux上用脚本来模拟这种行为,然后再将脚本添加到crontab中定时自动运行呢?
既然写这个文章,当然可以啦!
二、实现步骤
1.首先是在Linux上安装TFTP服务器,怎么安装和测试TFTP服务器请参照我先前写的《CentOS 5.3 安装TFTP》
2.脚本语言最好使用Perl,Perl脚本语言我也是刚接触,据我粗略的了解,其功能相当强大!至于多强大,你自己放狗搜呗!我主要是看好它有很多模块供你使用,其中就有Net::Telnet::Cisco模块。CentOS默认是安装了Perl的,你也可以用yum更新到最新版。Net::Telnet::Cisco模块默认是没有的,需要安装,安装方式请参照我先前写的《Linux下Perl 模块安装方法》
3.参考我下面的Perl脚本,脚本需要添加执行权限这些我就不累述了。
#!/usr/bin/perl
#backupcisco.pl
use Net::Telnet::Cisco;
use Net::Ping::External qw(ping);
#tftp服务器地址
my $tftp = '192.168.4.99';
while(<FILE>)
{
chomp;
my @fields = split(/\|/,$_); #以分隔符提取各项登录参数
my $host = $fields[0];
print "host:$host\t"; #设备的ip地址
my $pwd = $fields[1]; #登陆密码
print "pwd:$pwd\t";
my $enpwd = $fields[2]; #enable密码
my $hostname = $fields[3];
print "hostname: $hostname\n";
my $alive = ping(host => $host); #测试交换机是否能ping通
print "alive: $alive\n";
if ($alive) {
$r = Net::Telnet::Cisco->new(Host=>$host);
$r->login("admin",$pwd);
$r->enable($enpwd);
$r->cmd("copy startup-config tftp\n" . "$tftp\n\n");
$r->close();
}
}
直接运行脚本测试是否将device文本中所列交换机配置文件上传到TFTP根目录下。