在Cisco IOS中自动进行配置备份(每分钟)


16

我想让我的Cisco路由器每1分钟自动执行一次复制运行TFTP(并自动填充字段)。我也希望它在后台运行。有人知道这是否可行吗?我这样做是为了在notepad ++(它会实时更新)中查看路由器的运行配置,而不是必须进行show run并按空格键4或5次才能到达需要查看的内容。我认为这对于复杂的实验室非常有用。另外,由于TFTP服务器命令需要输入,因此宏不起作用。


3
一分钟真的有必要吗?您是否还考虑过在CLI上使用正则表达式使用内置过滤功能来过滤要查看的正在运行的配置部分?即| include还是| exclude?我正在努力查看能够“实时”查看正在运行的配置的有用性。
约翰·詹森

我喜欢一台带有拓扑和CLI窗口的监视器(带标签和标签)。我的第二台显示器具有我设备的所有正在运行的配置。能够实时查看我所有的运行配置,使故障排除,比较和复制/粘贴命令块变得非常容易。尤其是在深入研究路由映射语句和ACL时,不必键入show run | | | | |,这是一个巨大的好处。s的route-map几次,以查看配置的这一部分并将其与其他设备进行比较。很抱歉,您很难找到这个有用的方法,但是我想每个人都有。
迈克尔,

@JohnJensen好点,我不是每分钟都抓住机会。克里斯蒂安(Christian),您是否考虑过仅在第二台显示器上向设备打开第二个单独的ssh会话,而不是在文本文档中打开正在运行的配置?监视A的CLI会话以进行更改,监视B的CLI会话以查看配置。不要只说一种方法比另一种方法好,而只是把想法扔出去。:)
Brett Lykins

Brett,“显示运行配置”不会产生实时输出。每次进行更改时,我都必须再次键入show run,并且必须多次击空格键才能显示所有配置。目标是拥有完整运行的配置,这些配置几乎在您更改配置后立即更新,而无需用户干预。
迈克尔

@ChristiandelaPeña我跟着你,我只是说不同的人以不同的方式工作。我想我个人认为不需要以您描述的方式实时更新配置。这并没有错,只是不是我的工作方式。:)我想为您提供所需工具,以您想要的方式进行。只要您正在努力学习,这对我来说就很重要。
Brett Lykins

Answers:


19

您可以通过多种方法在Cisco设备上获得这种功能。(使用哪种设备取决于您的需求,有时取决于设备和IOS负载。某些较旧的设备/ IOS负载将具有不同的功能。)

编辑: 您正在询问每隔一分钟要执行一次此操作,正如您在我们的聊天室中发现的那样,它将使您的路由器停滞不前。(尤其是在GNS3中。)以下选项可用于自动配置备份,但是我不建议每1分钟这样做一次。

您可以:

  1. 使用思科的Kron功能进行命令调度。这将允许您按计划执行预定义的命令。如您所指出的,copy run tftp需要文件提示确认。(除非您已关闭文件提示确认,但是我不建议您将其作为常规设置。)重定向不需要确认。所以在调度程序中使用的命令是show run | redirect tftp://$SERVERIP/$PATH/$FILE

  2. 使用思科的存档功能进行配置管理。存档是一种以顺序方式存储配置的多个副本并在需要时将配置回滚到先前版本的方法。用Kron复制出来将覆盖以前的配置,而“存档”允许您在指定位置保留多达14个不同的配置版本。有关存档的更多有用信息,请参阅Cisco Learning网络上的此链接。特别是如何使用$ h和$ t标签动态设置文件名。

在以下两个示例中,您都可以根据自己的需要调整时间,而这些正是我很快从某些生产设备中撤出的。


示例配置,让Kron每周写入一次配置并将其备份到tftp服务器:

kron occurrence SaveConfig at 23:50 Mon recurring
policy-list SaveConfig
!
kron occurrence BackupRunningConfig at 23:55 Mon recurring
policy-list BackupRunningConfig
!
kron policy-list SaveConfig
cli write
!
kron policy-list BackupRunningConfig
cli show running-config | redirect tftp://10.10.10.10/configs/testswitch.txt

配置示例,使Archive每天将您的配置备份到tftp服务器:

archive
 path tftp://10.10.10.10/configs/$h-$t
 time-period 1440
 maximum 14

12

实际上的另一种方式。

您可以使用SNMP触发TFTP副本。它不是简单,但是非常有用。

首先,您将需要TFTP服务器(毫不奇怪)。您还需要可以发送snmp请求的内容。我已经使用Linux的snmp工具有效地做到了。

您将需要为SNMP建立一个新的社区,该社区的写访问权限有限,并可能使用IP ACL将其进一步锁定。实际上,您只需要能够写入ccCopyTableOID。

在Linux方面,您需要以下MIB(出于可读性,而非功能性)

CISCO-CONFIG-COPY-MIB
CISCO-SMI
CISCO-ST-TC

在Linux上的SNMP配置的相关位置安装了MIB之后,您应该能够测试snmptable的连接性:

snmptable -v2c -c writeCommunity 192.168.1.1 ccCopyTable
CISCO-CONFIG-COPY-MIB::ccCopyTable: No entries

通常,您需要在TFTP服务器上预先创建文件,以将路由器复制到该文件中。

为了触发TFTP复制,您需要在中插入一行ccCopyTable

snmpset 允许您执行此操作。

# snmpset -v2c -c writeCommunity 192.168.1.1 \
> ccCopyProtocol.23 i tftp \
> ccCopySourceFileType.23 i runningConfig \
> ccCopyDestFileType.23 i networkFile \
> ccCopyServerAddress.23 a 192.168.1.100 \
> ccCopyFileName.23 s router.conf

CISCO-CONFIG-COPY-MIB::ccCopyProtocol.23 = INTEGER: tftp(1)
CISCO-CONFIG-COPY-MIB::ccCopySourceFileType.23 = INTEGER: runningConfig(4)
CISCO-CONFIG-COPY-MIB::ccCopyDestFileType.23 = INTEGER: networkFile(1)
CISCO-CONFIG-COPY-MIB::ccCopyServerAddress.23 = IpAddress: 192.168.1.100
CISCO-CONFIG-COPY-MIB::ccCopyFileName.23 = STRING: router.conf

完成此操作后,您应该可以重新运行第一个命令,并在ccCopyTable中看到copy命令。

snmptable -v 2c -c writeCommunity 192.168.1.1 ccCopyTable

SNMP table: CISCO-CONFIG-COPY-MIB::ccCopyTable

 index Protocol SourceFileType DestFileType ServerAddress    FileName UserName
    23     tftp  runningConfig  networkFile     192.168.1.100 router.conf        ?

SNMP table CISCO-CONFIG-COPY-MIB::ccCopyTable, part 2

 index UserPassword NotificationOnCompletion State TimeStarted TimeCompleted
    23            ?                    false     ?           ?             ?

SNMP table CISCO-CONFIG-COPY-MIB::ccCopyTable, part 3

 index FailCause EntryRowStatus ServerAddressType ServerAddressRev1
    23         ?              ?              ipv4       "192.168.1.100"

除非您在ccCopyTable上设置另一列以激活该行,否则什么都不会发生。

 snmpset  -v2c -c writeCommunity 192.168.1.1 \
> ccCopyEntryRowStatus.23 i active

如果再次检查ccCopyTable,则应该看到State和TimeStarted已更新以反映该文件已被复制。

下面的源链接中有更多详细信息,包括如何清空ccCopyTable(如果需要)。

我在Linux服务器的脚本中使用了相同的方法来触发TFTP副本,然后将文件提交到git,然后将其推回到存储库中,而这一切都需要一个快速的过程。

来源:http//www.ciscozine.com/2013/08/22/how-to-save-configurations-using-snmp/

http://bodgitandscarper.co.uk/networks/using-snmp-to-trigger-cisco-tftp-backups/


2
多年来,我一直使用Pancho来做到这一点,直到最近我切换到RANCID以获得更多设备支持。强烈建议您使用RANCID,这纯粹是因为您也获得了版本控制权-使用'svn blame'可以确定该接口何时从全双工更改为自动,或者证明x个月内没有任何更改。
AnotherHowie 2013年

RANCID可以签入Git而不是SVN吗?
汤姆·奥康纳

我不这么认为。CVS是默认设置。SVN是一个选项。由于这是一种只写,单分支,单用户(RANCID)的版本控制情况,因此使用其他内容没有特别的好处。RANCID 3目前正在开发中,因此他们可能已经更新了该部分。但是,它是一个相对老式的软件-perl,expect和shell。
AnotherHowie 2013年

只是检查和RANCID 3没有提及新的VC的选项,在这里:gossamer-threads.com/lists/rancid/users/6555#6555
AnotherHowie

2

您可以使用EEM

例:

event manager applet dumpconfig
 event timer {absolute time time-value | countdown time time-value | cron cron-entry cron-entry | watchdog time time-value} [name timer-name]
 action 1.0 cli command "enable"
 action 2.0 cli show running-config | redirect tftp://10.10.10.10/configs/testswitch.txt
 action 998.0 cli command "end"
 action 999.0 cli command "exit"

我怀疑只有在NX-OS上……
Tom O'Connor

1
@Tom,我没有联系(不幸的是;-)),在IOS中受支持...我猜所有路由器和大多数交换机都支持EEM:例如,我只有一个模型,不支持EEM- 2950,但在2960s,3560、3750(E和非E),4500、4948、6500中受支持。
pyatka

2

您可以使用RANCID来做到这一点。

您还会得到一些其他好处,例如配置的版本控制,电子邮件差异和其他好处(默认情况下,它需要硬件清单,因此,如果硬件发生更改,您将收到有关此事的警报)。

到目前为止,我的所有交换机和路由器(Cisco / Juniper / Dell)都可以使用它,这是另一个优势。


1

您可以使用perl脚本,例如this。用法:perl cisco_backup.pl "my-enable-password"


1
仅链接的帖子的用处受到限制。您可以将此解决方案的相关部分添加到答案中吗?
瑞安·弗利

切勿在命令行中输入密码。请改用环境。
美洲狮

0

fetchconfig是用于此的另一个工具:

fetchconfig是一个Perl脚本,用于检索多个设备的配置。它已经过Linux和Windows的测试,目前支持各种设备,包括Cisco IOS,Cisco Catalyst,Cisco ASA,Cisco PIX,FortiGate防火墙,ProCurve,阿尔卡特以太网路由器(又名Riverstone),Dell PowerConnect交换机,Terayon 3200 / 3500 CMTS,Datacom DmSwitch交换机,HP MSR路由器,Mikrotik路由器,Tellabs MSR路由器,Juniper EX交换机JunOS,Oracle Acme数据包,音频代码中介,Cisco IOS XR,NEC Univerge IX。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.