Rancid+Subversion (SVN)管理Cisco配置
 

2009-11-20 来源:网络

 

Ranci全称为Really Awesome New Cisco config Differ是可以与CVS(Concurrent Version System)或Subversion (SVN) 协同工作来监控Cisco设备的配置、软件包括硬件变化的工具。

这篇文章主要来介绍用Rancid来做Cisco路由、交换机配置文件变更控制。软件可从这里获得:目前正式版本2.3.1。另外两个alpha版本rancid-2.3.2a7.tar.gz 和 rancid-wcgallar.tar.gz。

安装SVN

这个依发行版本而定,CentOS 5 为例,系统默认已经安装了SVN

例如在Fedora下则:

$ yum install subversion

在Debian下则:

$ sudo apt-get install subversion

其他的则可以下载源码http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/subversion/

进入你保存的位置如 'cd /usr/ports/devel/subversion'

$ make install

或者

wget -r -np -nH --cut-dirs=1 http://svn.textpattern.com/releases/4.0.6/source/

安装过程很快很简单。

配置SVN

创建用户rancid以及一个SVN库(假设路径为/home/svn/cisco)

$ useradd -g netadm -c "Networking Backups" -d /usr/local/rancid rancid #创建用户rancid 属于netadm 这个组并且指定用户主目录为/usr/local/rancid,此处与后文配置rancid有关联。

$ svnadmin create /home/svn/cisco

启动svn服务

$ svnserve -d -r /home/svn/cisco
修改/home/svn/cisco下的conf/svnserve.conf,改为
[general]
anon-access = none # 不允许匿名登录
auth-access = write # 可以用户读写

password-db = passwd

修改文件passwd,增加用户(假设用户和密码均为rancid),如
[users]
rancid = rancid

用户svn+ssh访问

因为passwd文件中的密码为明文处于安全性考虑使用svn+ssh的访问模式。

1.安装OpenSSH。CentOS 5 已经缺省安装。

2.用cisco用户登录,生成密钥对。

$ ssh-keygen -b 1024 -t dsa -N passphrase -f mykey #认证方式利用DSA公开密匙加密算法进行加密,两把密钥的配对认证方式使服务器运作更安全。其中passphrase为密钥密码,必须修改成你需要的密码;mykey为文件名。

这时生成两个文件私钥mykey和公钥mykey.pub。

3.$ cd /home/cisco

$ mkdir .ssh

$ cp mykey.pub /home/cisco/.ssh/authorized_keys #拷贝公钥到.ssh/authorized_keys,文件名必须是authorized_keys,以上针对服务器端。

4.启动svn+ssh服务

$ svnserve -t -r ~/cisco &

5.私钥mykey根据需要转移到你的客户端:

如果是linux客户端,需要将mykey放置在登陆用户家目录的.ssh/目录下面。

如果是Windows客户端下载putty,下载这几个执行文件"Putty", "Plink", "Pageant" and "Puttygen"

下载网址:http://www.chiark.greenend.org.uk/~sgtatham/putty/

下载到如 E:\Program Files\putty

6.转换私钥格式

1) 将mykey拷贝到windows客户端,双击运行puttygen。

2) 选择菜单conversions->Import Key,选择文件mykey。

点击按钮Save private key,保存文件名为mykey.PPK。

7.在putty里创建session,如下

Session->Host Name: IP地址

Session->Protocol: SSH

Session->Saved Sessions: MyConnection

SSH->Prefered SSH Protocol version: 2

SSH->Auth->Private Key file for auth: E:\Program Files\putty\mykey.ppk,可以替换为实际目录。

测试MyConnection连接是否成功。

8.TortoiseSVN中测试SSH

1) 鼠标右键选择TortoiseSVN->RepoBrowser

2) 输入URL

svn+ssh://svn@MyConnection/home/svn/svnroot

3) 会提示输入密码两次,每进入一个目录都需要输入两次密码。

9.方法二。自动登录用户名

putty的MyConnection设置里connection->Data->Auto Login username: svn

svn+ssh://MyConnection/home/svn/svnroot

10.方法三。不使用putty的session。

1) 设置TortoiseSVN->Settings->Network->SSH client: E:\Program Files\TortoiseSVN\bin\TortoisePlink.exe

2) 运行pageant,点击右键->Add Key,将私钥文件加入。

3) svn+ssh://cisco@svn服务器/home/svn/cisco

安装、配置完SVN之后,我们开始完成剩下的步骤:

安装Rancid

1.创建以下Rancid目录,(在上一个主题里面已经创建了用户Rancid并且属于组netadm)并且下载Rancid 软件包到该目录:

#mkdir /usr/local/rancid/tar
# cd /usr/local/rancid/tar
# wget ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.2a2.tar.gz
--01:14:26-- ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.2a2.tar.gz
=> `rancid-2.3.2a2.tar.gz'
...
...
...
100%[==============================>] 280,435 153.28K/s01:14:58 (152.78 KB/s) - `rancid-2.3.2a2.tar.gz' saved [280,435]

2.解包编译Rancid

# tar -xvzf rancid-2.3.2a2.tar.gz
rancid-2.3.2a2/bin/Makefile.am
rancid-2.3.2a2/bin/Makefile.in
rancid-2.3.2a2/bin/alogin.in
...
...
...
rancid-2.3.2a2/man/lg.conf.5.in
rancid-2.3.2a2/man/rancid.conf.5.in
rancid-2.3.2a2/man/lg_intro.1.in

3.进入压缩后的目录,该目录下面有一个READMEt提供很详细的安装说明,可以看一下。这里我采用默认的安装路径进行安装。

# cd rancid-2.3.2a2
[root@test rancid-2.3.2a2]#
[root@test rancid-2.3.2a2]# less README

4. 开始编译Rancid 包,--prefix 是用来设置安装路径的,如果不设置--prefix 那么就按照默认的安装路径来安装Rancid. 我们的安装路径是/usr/local/rancid/ ,是Rancid 这个用户的家目录.

[root@test rancid-2.3.2a2]# ./configure --prefix=/usr/local/rancid/
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
...
...
...
config.status: creating include/config.h
config.status: include/config.h is unchanged
config.status: executing depfiles commands
[root@test rancid-2.3.2a2]#

5.正式开始安装

[root@test rancid-2.3.2a2]# make install
Making install in .
gmake[1]: Entering directory `/usr/local/rancid/tar/rancid-2.3.2a2'
gmake[2]: Entering directory `/usr/local/rancid/tar/rancid-2.3.2a2'
gmake[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/rancid//share/rancid" || mkdir -p -- "/usr/local/rancid//share/rancid"
...
...
...
/usr/bin/install -c 'downreport' '/usr/local/rancid//share/rancid/downreport'
gmake[2]: Leaving directory `/usr/local/rancid/tar/rancid-2.3.2a2/share'
gmake[1]: Leaving directory `/usr/local/rancid/tar/rancid-2.3.2a2/share'
[root@test rancid-2.3.2a2]#

6.拷贝实例password文件cloginrc.sample 为 /usr/local/rancid/.cloginrc.

[root@test rancid-2.3.2a2]# cp cloginrc.sample /usr/local/rancid/.cloginrc
[root@test rancid-2.3.2a2]#

7.由于这个password文件的密码是明文形式保存的,出于安全性考虑设定该password文件的访问权限,对rancid和netadm组成员可读,另外改变rancid目录的ownership和权限.

[root@test rancid-2.3.2a2]# chmod 0640 /usr/local/rancid/.cloginrc
[root@test rancid-2.3.2a2]# chown -R rancid:netadm /usr/local/rancid/
[root@test rancid-2.3.2a2]# chmod 770 /usr/local/rancid/

配置Rancid

1.配置rancid.conf 文件,在例子当中我们创建一个Switch的设备组,这样获得的Cisco配置文件会被保存在usr/local/rancid/var/Switch目录下面。并且需要在这个文件中指定管理方式为:SVN,因为在老的版本中只支持CVS模式,其他不需要设置,Rancid会自动切换保存到SVN的目录中去。

[root@bigboy rancid-2.3.2a2]# vi /usr/local/rancid/etc/rancid.conf
#
# Sample rancid.conf
#
LIST_OF_GROUPS="Switch"#这里可以批量创建多个组,中间用空格分开
FILTER_PWDS=NO; export FILTER_PWDS
NOCOMMSTR=NO; export NOCOMMSTR

2.一下步骤需要su到rancid用户下进行。

[root@test rancid-2.3.2a2]# su - rancid

3.执行rancid-cvs 命令可以自动创建目录 /usr/local/rancid/var/CVS/Switch 并且生成相应的数据库文件设备清单文件等等。在执行rancid-run 之前需要修改router.db文件指定设备的地址等等.

[rancid@test ~]$ /usr/local/rancid/bin/rancid-cvs
No conflicts created by this import
cvs checkout: Updating Switch
cvs checkout: Updating Switch/configs
cvs add: scheduling file `router.db' for addition
cvs add: use 'cvs commit' to add this file permanently
RCS file: /usr/local/rancid/var/CVS/Switch/router.db,v
done
Checking in router.db;
/usr/local/rancid//var/CVS/networking/router.db,v <-- router.db
initial revision: 1.1
done
[rancid@test ~]$

4.配置router.db文件

vi /local/usr/rancid/var/CVS/Switch/router.db192.168.1.1:cisco:up #router.db 的格式为 dns-name-or-ip-address:device-type:status,我们举例一个地址为192.168.0.1的交换机

5.配置.clogin.rc文件

vi /local/usr/rancid/.clogin.rc
#
# Sample .clogin.rc file
#####################################################################
#
# Device 192.168.1.16 has a unique username and password, but
# doesn't logins do not get the enable prompt.
#
# If the device prompts for a username, Rancid will use the Linux
# "rancid" username and the first password in the list. If only a
# login password is requested, rancid uses the first password in the
# list. The second password is the "enable" password.
#
####################################################################add password 192.168.0.1 {telnet-password} {enable-password}####################################################################
#
# Devices with DNS names ending in my-web-site.org in the router.db
# file or beginning with 172.16. have a different set of passwords.
#
# If the device prompts for a username, Rancid will use the Linux
# "rancid" username and the first password in the list. If only a
# login password is requested, rancid uses the first password in the
# list. The second password is the "enable" password.
#
####################################################################

add password *.my-web-site.org {telnet-password} {enable-password}
add password 172.16.* {telnet-password} {enable-password}

####################################################################
#
# Everything else uses these passwords. Rancid will attempt to use
# telnet then SSH for logins
#
####################################################################

add password * {telnet-password} {enable-password}
add method * telnet ssh

简单测试

1.执行clogin可以用来测试连接是否成功:

[rancid@test ~]$ bin/clogin 192.168.0.1
192.168.0.1
spawn telnet 192.168.0.1
Trying 192.168.0.1...
Connected to (192.168.0.1).
Escape character is '^]'.User Access VerificationPassword:
Type help or '?' for a list of available commands.
pixfirewall> enable
Password: ********
pixfirewall#
pixfirewall# exit

Logoff

Connection closed by foreign host.
[rancid@test ~]$

2.执行rancid-run,和rancid-cvs可以用来测试备份是否成功:

[rancid@test ~]$ bin/rancid-run
[rancid@test ~]$ bin/rancid-cvs

然后你可以去寻找备份文件是否产生。

添加到crontab使之周期性执行比较备份

[rancid@test ~]$ crontab -e#
# Rancid user's crontab file
## Run config differ hourly
1 * * * * /usr/local/rancid/bin/rancid-run

# Clean out config differ logs
50 23 * * * /usr/bin/find /usr/local/rancid/var/logs -type f -mtime +2 -exec rm {} \;

火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。

资源网站: UML软件工程组织