Rancid+Subversion (SVN)管理Cisco配置(1)

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
进入你保存的位置如 ‘ cd /usr/ports/devel/subversion
$ make install
或者
安装过程很快很简单。
  • 配置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”
下载网址: [url]http://www.chiark.greenend.org.uk/~sgtatham/putty/[/url]
下载到如    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 [url]ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.2a2.tar.gz[/url]
–01:14:26– [url]ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.2a2.tar.gz[/url]
  => `rancid-2.3.2a2.tar.gz’



100%[==============================>] 280,435 153.28K/s
01: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.db
192.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 Verification Password:
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 {} \;