本文档介绍如何在具有Catalyst操作系统(CatOS)的交换机和具有简单网络管理协议(SNMP)的UNIX上的简单文件传输协议(TFTP)服务器之间移动配置文件和系统软件映像。
验证您能从Catalyst交换机ping TFTP服务器的IP地址:
Cat6509> (enable) ping 171.68.191.135
!!!!!
----171.68.191.135 PING Statistics----
5 packets transmitted, 5 packets received, 0% packet loss
round-trip (ms) min/avg/max = 2/2/2
这些步骤包括:
不适用于基于Cisco IOS®软件(如Catalyst 2900/3500XL系列)的Catalyst交换机。
不适用于带有Cisco IOS软件的Catalyst 6000系列MSFC和MSFC2模块。
如果交换机上未配置或未知SNMP读写社区字符串,则不适用。有关如何配置SNMP社区字符串的详细过程,请参阅如何配置SNMP社区字符串。
基于NET-SNMP(以前称为UCD-
SNMP)实用程序的命令行语法。如果您有其他SNMP应用程序,如HP Open View或NetView,则语法可能与这些示例不同。
基于CISCO-STACK-MIB,自初始管理引擎模块软件版本起,Catalyst OS支持该MIB。请参阅Cisco.com上的“产品支持的MIB”页,以验证您的交换机是否支持CISCO-STACK-MIB。使用来自此MIB的以下MIB对象:
MIB 对象名称
OID
tftpHost
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .1
tftpFile
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .2
tftpModule
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .3
tftpAction
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .4
tftpResult
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .5
有关这些MIB对象及其定义的详细信息,请参阅附录A。
本文档中的信息基于仅运行Catalyst OS软件的交换机。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
在所有示例中,这些值用于说明:
带CatOS的Catalyst 6509交换机
172.16.99.66 = Catalyst 6509交换机的IP地址
private = SNMP读写社区字符串。使用在交换机上配置的读写字符串。在交换机CLI上使用show snmp命令来验证这一点。
public = SNMP只读社区字符串。使用在交换机上配置的只读字符串。在交换机CLI上使用show snmp命令来验证这一点。
171.68.191.135 = TFTP服务器的IP地址
以下是以下示例中snmpset和snmpwalk命令的语法:
snmpset [options...] {} [ ...]
snmpwalk [options...] {} []
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
这些步骤将指导您完成复制配置文件的过程。
请完成以下步骤:
在TFTP服务器/tftpboot目录中创建新文件switch-config。在UNIX上,使用以下语法:按。
touch switch-config
将文件的权限更改为777。请使用以下语法:chmod 。
chmod 777 switch-config
使用tftpHost MIB对象定义TFTP服务器的IP地址:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.1.0 s 171.68.191.135
enterprises.9.5.1.5.1.0 = "171.68.191.135"
使用tftpFile MIB对象定义用于复制配置的TFTP文件名:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.2.0 s switch-config
enterprises.9.5.1.5.2.0 = switch-config
在Catalyst交换机上选择要传送配置的模块,并带有tftpModule MIB对象。选择Supervisor模块,而不是MSFC或MSFC2模块,否则它会失败。在交换机CLI上使用show module命令验证snmpset命令的模块编号是否正确。典型输出为:
Mod Slot Ports Module-Type Model Sub Status
--- ---- ----- ------------------------- ------------------- --- --------
2 2 2 1000BaseX Supervisor WS-X6K-SUP1A-2GE yes ok
16 2 1 Multilayer Switch Feature WS-F6K-MSFC no OK
....
----
在输出示例中,Supervisor模块编号为2,位于插槽编号2中。使用2定义tftpModule MIB对象:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.3.0 i 2
enterprises.9.5.1.5.3.0 = 2
使用tftpAction MIB对象定义要从TFTP服务器传输到MIB对象值为2 = downloadConfig的交换机的交换机配置文件。请参阅附录A中的MIB对象详细信息:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.4.0 i 2
enterprises.9.5.1.5.4.0 = 2
要验证这些操作的结果,请执行以下步骤之一:
轮询tftpGrp(.1.3.6.1.4.1.9.5.1.5)MIB对象,并将结果与附录A进行比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5
enterprises.9.5.1.5.1.0 = "171.68.191.135"
!--- IP address of the TFTP server
enterprises.9.5.1.5.2.0 = "switch-config"
!--- name of the switch configuration file
enterprises.9.5.1.5.3.0 = 2
!--- Module number. In this case, Supervisor module
enterprises.9.5.1.5.4.0 = 2
!--- TFTP action. 2 = Download configuration from TFTP server to the switch
enterprises.9.5.1.5.5.0 = 2
!--- Result of the TFTP action, 2 = Success
轮询tftpResult MIB对象,并将输出与附录A中的MIB对象详细信息比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5.5
enterprises.9.5.1.5.5.0 = 2
!--- Result of the TFTP action, 2 = Success
如果下载成功,则MIB对象输出等于2(或成功)。 如果您收到其他输出,请将其与tftpResult对象的附录A进行比较,并采取相应的步骤。
这些步骤将指导您完成复制配置文件的过程。
请完成以下步骤:
在TFTP服务器/tftpboot目录中创建新文件switch-config。在UNIX上,使用以下语法:按。
touch switch-config
使用以下语法将文件的权限更改为777:chmod 。
chmod 777 switch-config
使用tftpHost MIB对象定义TFTP服务器的IP地址。语法为:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.1.0 s 171.68.191.135
enterprises.9.5.1.5.1.0 = "171.68.191.135"
使用tftpFile MIB对象定义用于复制配置的TFTP文件名:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.2.0 s switch-config
enterprises.9.5.1.5.2.0 = switch-config
在Catalyst交换机上选择要传送配置的模块,并带有tftpModule MIB对象。选择Supervisor模块,而不是MSFC或MSFC2模块,否则它会失败。在交换机CLI上使用show module命令验证snmpset命令的模块编号是否正确。典型输出为:
Mod Slot Ports Module-Type Model Sub Status
--- ---- ----- ------------------------- ------------------- --- --------
2 2 2 1000BaseX Supervisor WS-X6K-SUP1A-2GE yes ok
16 2 1 Multilayer Switch Feature WS-F6K-MSFC no OK
....
----
在输出示例中,Supervisor模块编号为2,位于插槽编号2中。使用2可定义tftpModule MIB对象:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.3.0 i 2
enterprises.9.5.1.5.3.0 = 2
使用tftpAction MIB对象以定义交换机配置文件将从TFTP服务器传输到MIB对象值为3 = uploadConfig的交换机。请参阅附录A中的MIB对象详细信息:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.4.0 i 3
enterprises.9.5.1.5.4.0 = 3
要验证这些操作的结果,请执行以下步骤之一:
轮询tftpGrp(.1.3.6.1.4.1.9.5.1.5)MIB对象,并将结果与附录A进行比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5
enterprises.9.5.1.5.1.0 = "171.68.191.135"
!--- IP address of the TFTP server
enterprises.9.5.1.5.2.0 = "switch-config"
!--- name of the switch configuration file
enterprises.9.5.1.5.3.0 = 2
!--- Module number. In this case, Supervisor module
enterprises.9.5.1.5.4.0 = 1
!--- TFTP action
enterprises.9.5.1.5.5.0 = 2
!--- Result of the TFTP action, 2 = Succes
轮询tftpResult MIB对象,并将输出与附录A中的MIB对象详细信息比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5.5
enterprises.9.5.1.5.5.0= 2
!--- Result of the TFTP action, 2 = Success
如果下载成功,则MIB对象输出等于2(或成功)。 如果您收到其他输出,请将其与tftpResult对象的附录A进行比较,并采取相应的步骤。
注意: 此过程从交换机传输默认和非默认配置,如启用模式下交换机CLI上show config all命令的输出所示。交换机上的show config命令仅显示非默认配置。
这些步骤将指导您完成复制软件映像的过程。
请完成以下步骤:
下载正确的Supervisor映像文件并将其放置到TFTP服务器的/tftpboot目录中。在本示例中,使用cat6000-sup.5-4-2a.bin进行图示。
使用以下语法将文件的权限更改为777:chmod 。
chmod 777 cat6000-sup.5-4-2a.bin
定义使用tftpHost MIB对象的TFTP服务器的IP地址:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.1.0 s 171.68.191.135
enterprises.9.5.1.5.1.0 = "171.68.191.135"
定义用于复制映像文件的TFTP文件名:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.2.0 s cat6000-sup.5-4-2a.bin
enterprises.9.5.1.5.2.0 = "cat6000-sup.5-4-2a.bin"
在本示例中,Supervisor模块编号为2,并且位于插槽编号2中,如show module命令输出所示。使用2 以定义tftpModule MIB对象:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.3.0 i 2
enterprises.9.5.1.5.3.0 = 2
这意味着TFTP服务器上/tftpboot目录中的CatOS映像将传输到Supervisor模块闪存,如show flash命令的输出所示。
使用tftpAction MIB对象以定义将映像文件从TFTP服务器传输到MIB对象值为4 = downloadSw的交换机。请参阅附录A中的MIB对象详细信息:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.4.0 i 4
enterprises.9.5.1.5.4.0 = 4
要验证此操作的结果,请执行以下步骤之一:
轮询tftpGrp(.1.3.6.1.4.1.9.5.1.5)MIB对象,并将结果与附录A进行比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5
enterprises.9.5.1.5.1.0 = "171.68.191.135"
!--- IP address of the TFTP server
enterprises.9.5.1.5.2.0 = "cat6000-sup.5-4-2a.bin"
!--- name of the switch image file
enterprises.9.5.1.5.3.0 = 0
enterprises.9.5.1.5.4.0 = 4
!--- TFTP action, 4 = downloadSw
enterprises.9.5.1.5.5.0 = 1
!--- Result of the TFTP action, 1 = In Process
注:最后一个条目显示图像传输正在进行。等待几分钟,然后再次轮询tftpResult MIB对象,以验证其已成功传输。此步骤可能需要几分钟才能完成,具体取决于映像文件大小(字节)。 当映像传输过程正在进行时,如果在交换机上发出show flash命令,您将看到:
Cat6509> (enable) show flash
TFTP session in progress. Try again later.
轮询tftpResult MIB对象,并将输出与附录A中的MIB对象详细信息比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5.5
enterprises.9.5.1.5.5.0 = 2
!--- Result of the TFTP action, 2 = Success
如果下载成功,则MIB对象输出等于2(或成功)。 如果您收到其他输出,请将其与tftpResult对象的附录A进行比较,并采取相应的步骤。
成功完成映像传输后,验证映像文件大小(字节)是否与TFTP服务器(本例中为cat6000-sup.5-4-2a.bin)中的文件(show flash命令输出中显示的文件)匹配。
这些步骤将指导您完成复制软件映像的过程。
请完成以下步骤:
在TFTP服务器的/tftpboot目录中创建一个新文件image.bin。在UNIX上,使用以下语法:按。使用.bin作为文件扩展名。
touch image.bin
使用以下语法将文件的权限更改为777:chmod 。
chmod 777 image.bin
使用tftpHost MIB对象定义TFTP服务器的IP地址:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.1.0 s 171.68.191.135
enterprises.9.5.1.5.1.0 = "171.68.191.135"
定义将用于复制映像文件的TFTP文件名和tftpFile MIB对象:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.2.0 s image.bin
enterprises.9.5.1.5.2.0 = "image.bin"
在本示例中,Supervisor模块编号为2,并且位于插槽编号2中,如show module命令输出所示。使用2定义tftpModule MIB对象:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.3.0 i 2
enterprises.9.5.1.5.3.0 = 2
这意味着在闪存中的Supervisor模块上运行的CatOS映像会传输到TFTP服务器,如show flash命令的输出所示。
使用tftpAction MIB对象以定义将映像文件从TFTP服务器传输到MIB对象值为5= uploadSw的交换机。请参阅附录A中的MIB对象详细信息:
% snmpset 172.16.99.66 private .1.3.6.1.4.1.9.5.1.5.4.0 i 5
enterprises.9.5.1.5.4.0 = 5
要验证这些操作的结果,请执行以下步骤之一:
轮询tftpGrp(.1.3.6.1.4.1.9.5.1.5)MIB对象,并将结果与附录A进行比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5
enterprises.9.5.1.5.1.0 = "171.68.191.135"
!--- IP address of the TFTP server
enterprises.9.5.1.5.2.0 = "image.bin"
!--- name of the switch image file
enterprises.9.5.1.5.3.0 = 2
!--- Module number. In this case, Supervisor module
enterprises.9.5.1.5.4.0 = 5
!--- TFTP action, 5 = uploadSw
enterprises.9.5.1.5.5.0 = 1
!--- Result of the TFTP action, 1 = In Process
注:最后一个条目显示图像传输正在进行。等待几分钟,然后再次轮询tftpResult MIB对象,以验证其已成功传输。此步骤可能需要几分钟才能完成,具体取决于映像文件大小(字节)。
轮询tftpResult MIB对象,并将输出与附录A中的MIB对象详细信息比较:
% snmpwalk 172.16.99.66 public .1.3.6.1.4.1.9.5.1.5.5
enterprises.9.5.1.5.5.0 = 2 --> Result of the TFTP action, 2 = Success
如果下载成功,则MIB对象输出等于2(或成功)。 如果您收到其他输出,请将其与tftpResult对象的附录A进行比较,并采取相应的步骤。
成功完成映像传输后,验证TFTP服务器(本例中为image.bin)中文件的show flash命令输出中显示的映像文件大小(字节)是否匹配。
注意:如果闪存中有多个映像(show flash),则只有启动Supervisor模块的映像才会通过此过程传输到TFTP服务器。使用show boot命令查看BOOT变量=,该变量显示Supervisor模块使用闪存中的哪个映像进行启动。有关详细信息,请参阅升级软件映像和使用Catalyst交换机上的配置文件。
注意:这些脚本仅作为示例提供,Cisco Systems不以任何方式支持。
在交换机上自动执行配置文件和Cisco IOS迁移的脚本
#!/bin/sh
# Script to automate config file & IOS migration of switches
# supporting STACK-MIB including 5000, 5500, 1400, 2900, 1200
if [ ! -f SW ] ;
then
echo
echo "File SW does not exist!!!"
echo
echo "Syntax is 'switch.sh'"
echo "where each line in file SW lists:"
echo "Switchname Filename Serverip Module# Moduleaction Community"
echo
echo "Switchname must resolve"
echo "Filename must exist in server tftpboot directory 777"
echo "Serverip is the ip of the server for the file"
echo "Module# is usually '1'"
echo "Module action is as per STACK-MIB: "
echo "- 2 - config file - server > switch"
echo "- 3 - config file - switch > server"
echo "- 4 - software image - server > switch"
echo "- 5 - software image - switch > server"
echo "Community is *write* community"
echo
exit
fi
cat SW |
while read SW
do
SWNAME=\Qecho $SW | cut -d' ' -f 1\Q
FILE=\Qecho $SW | cut -d' ' -f 2\Q
SERVER=\Qecho $SW | cut -d' ' -f 3\Q
MODULE=\Qecho $SW | cut -d' ' -f 4\Q
ACTION=\Qecho $SW | cut -d' ' -f 5\Q
CMTY=\Qecho $SW | cut -d' ' -f 6\Q
echo
echo $SWNAME
echo $FILE
echo $SERVER
echo $MODULE
echo $ACTION
echo $CMTY
echo
# '-t #' can be modified to adjust timeout
snmpset -t 100 -c $CMTY $SWNAME .1.3.6.1.4.1.9.5.1.5.1.0 octetstring $SERVER
sleep 5
snmpset -t 100 -c $CMTY $SWNAME .1.3.6.1.4.1.9.5.1.5.2.0 octetstring $FILE
sleep 5
snmpset -t 100 -c $CMTY $SWNAME .1.3.6.1.4.1.9.5.1.5.3.0 integer $MODULE
sleep 5
snmpset -t 100 -c $CMTY $SWNAME .1.3.6.1.4.1.9.5.1.5.4.0 integer $ACTION
sleep 60
echo
echo Check Progress...
echo
echo
echo "Switch $SWNAME: \\c"; snmpget -t 100 -c $CMTY $SWNAME .1.3.6.1.4.1.9.5.1.5.5.0 | cut
-d":" -f 3
done
交换机期望脚本在交换机上执行特定命令
#!/usr/nms/bin/expect
# Above line points to your expect interpreter
# Add '-d' option to expect line above to enable debugging
# Tested on Cat5000 with regular login; no error-checking
# except for number arguments, but will timeout on failure.
# Tacacs+ lines left in for future releases
set argc [llength $argv]
if { $argc < 4} {
puts "Syntax is:"
puts "(For system with no Tac+)"
puts "switch.exp destination \"command\" vtypassword enapassword"
exit 0 }
set destination [lindex $argv 0]
puts -nonewline "Where we're going: "
puts $destination
set command [lindex $argv 1]
puts -nonewline "What we're doing: "
puts $command
set vtypassword [lindex $argv 2]
puts -nonewline "What our password is (vty): "
puts $vtypassword
set enapassword [lindex $argv 3]
puts -nonewline "What our password is (enable): "
puts $enapassword
# username only for Tac+
set username [lindex $argv 4]
puts -nonewline "What our username is if Tac+: "
puts $username
#
set timeout 10
spawn telnet $destination
expect {
"Enter password:" {
send "$vtypassword\r" }
"Username:" {
send "$username\r"
exec sleep 1
expect "Password:"
send "$vtypassword\r"
}
}
# Look for non-enable router 'prompt>'
expect -re "(^.*)(\r\n\[^ \]+> \$)"
# Get into enable mode
send "en\r"
expect {
"password: " {
send "$enapassword\r" }
"Username:" {
send "$username\r"
exec sleep 1
expect "Password:"
send "$enapassword\r" }
}
# Look for enable router 'prompt#'
expect -re "(^.*)(\r\n\[^ \]+(enable) \$)"
# Send the command
send "$command\r"
expect {
-re "(^.*)(\r\n\[^ \]+ (enable) \$)" {
append buffer $expect_out(1,string)
}
-re "(^.*)(\r\n\ --More-- \$)" {
append buffer $expect_out(1,string)
send " "
}
-re "(^.*)(\r\n\ --More-- \$)" {
append buffer $expect_out(1,string)
send " "
}
}
# Done with command - disable prior to exit
send "disable\r"
expect -re "(^.*)(\r\n\[^ \]+> \$)"
exec sleep 1
send "logout"
Perl脚本通过SNMP显示与“show cam dynamic”相同的输出
#!/usr/local/bin/perl
open(TABLE, "bridge-table.csv") || die "Cant' open file: $!\n";
while (
($vlan, $unicast_mac, $mod_ports) = split (/,/, $_);
write;
}
exit;
format STDOUT =
set cam permanent @<<<<<<<<<<<<<<<<<< @<<< @<
$unicast_mac, $mod_ports, $vlan
对象
tftpHost
OID
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .1
类型
显示字符串
权限
读写
语法
二进制八位数字符串(0.64)
状态
当前
描述
用于TFTP传输或存储设备传输的源/目标主机的名称。如果名称用于TFTP传输,则可以是IP地址或主机名。如果存储设备传输的名称为deviceName:(例如slot0:、slot1:)
树中的OID
::= { iso(1)org(3)dod(6)internet(1)private(4)enterprises(1)cisco(9)workgroup(5)ciscoStackMIB(1)tftpGrp(5)1 }
对象
tftpFile
OID
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .2
类型
显示字符串
权限
读写
语法
二进制八位数字符串(0.64)
状态
当前
描述
用于TFTP传输或存储设备传输的文件名。
树中的OID
::= { iso(1)org(3)dod(6)internet(1)private(4)enterprises(1)cisco(9)workgroup(5)ciscoStackMIB(1)tftpGrp(5)2 }
对象
tftpModule
OID
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .3
类型
整数
权限
读写
状态
当前
范围
0 - 16
描述
传输模块的哪个代码/配置。
树中的OID
::= { ISO(1)org(3)DOD(6)Internet(1)私有(4)企业(1)cisco(9)workgroup(5)ciscoStackMIB(1)tftpGrp(5)3 }
对象
tftpAction
OID
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .4
类型
整数
权限
读写
状态
当前
价值
其他
downloadConfig
uploadConfig
downloadSw
uploadSw
downloadFw
uploadFw
描述
如果将此对象设置为可接受值之一,它会使用tftpHost、tftpFile和tftpModule中提供的信息启动请求的操作。downloadConfig(2):从主机/文件上传接收配置Config(3):将配置发送到主机/文件downloadSw(4):从主机/文件上传软件(5)接收软件映像:将软件映像发送到主机/文件下载Fw(6):从主机/文件上传接收固件映像Fw(7):向主机/文件发送固件映像如果将此对象设置为任何其他值,则会出现错误。
树中的OID
::= { ISO(1)org(3)DOD(6)Internet(1)私有(4)企业(1)cisco(9)workgroup(5)ciscoStackMIB(1)tftpGrp(5)4 }
对象
tftpResult
OID
.1 .3 .6 .1 .4 .1 .9 .5 .1 .5 .5
类型
整数
权限
只读
状态
当前
价值
正在进行
成功
noResponse
tooManyRetries
noBuffers
noProcesses
badChecksum
badLength
badFlash
serverError
userCancelled
错误代码
fileNotFound
invalidTftpHost
invalidTftpModule
accessViolation
unknownStatus
invalidStorageDevice
insufficientSpaceOnStorageDevice
insufficientDramSize
不兼容映像
描述
包含最后一个TFTP操作请求的结果
树中的OID
::= { ISO(1)org(3)DOD(6)Internet(1)私有(4)企业(1)cisco(9)workgroup(5)ciscoStackMIB(1)tftpGrp(5)5 }