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

评论

一分钟真的有必要吗?您是否还考虑过在CLI上使用正则表达式使用内置过滤功能来过滤要查看的正在运行的配置部分?即包含或|排除?我正在努力查看能够“实时”查看正在运行的配置的有用性。

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

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

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

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

#1 楼

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

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

您可以:


使用Cisco的Kron功能进行命令调度。这将允许您按计划执行预定义的命令。如您所指出的,copy run tftp需要文件提示确认。 (除非您已关闭文件提示确认,但是我不建议您将其作为常规设置。)重定向不需要确认。因此,在调度程序中使用的命令是show run | redirect tftp://$SERVERIP/$PATH/$FILE
使用Cisco的Archive功能进行配置管理。存档是一种以顺序方式存储配置的多个副本并在需要时将配置回滚到先前版本的方法。用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


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

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


#2 楼

实际上,还有另一种方法。

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

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

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

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

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


安装了MIB Linux上SNMP配置的相关位置,您应该能够由此测试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中查看复制命令。

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/

评论


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

–otherHowie
2013年12月17日在9:21

RANCID可以签入Git而不是SVN吗?

–汤姆·奥康纳(Tom O'Connor)
2013年12月18日下午14:02

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

–otherHowie
2013年12月18日17:44



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

–otherHowie
13年12月18日在17:48

#3 楼

您可以使用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)
2013年12月18日下午14:02

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

– pyatka
2013年12月19日5:35



#4 楼

您可以使用RANCID进行此操作。

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

它可以与到目前为止我扔给它的每台交换机和路由器(Cisco / Juniper / Dell)一起使用,这是另一个优点。

#5 楼

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

评论


仅链接的帖子的用途受到限制。您可以将此解决方案的相关部分添加到答案中吗?

– Ryan Foley
2015年1月9日在9:55

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

–美洲狮
2015年3月3日13:59

#6 楼

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


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