如何通过 snmp 获取 scp 以与 cisco 路由器一起使用?

网络工程 思科 路由器 snmp
2021-07-02 19:03:29

我有一个实验室设置,我试图通过 SNMP 将 SCP 用于 cisco 路由器。我找到了一些在线文档,例如:http : //ccie20728.wordpress.com/2008/05/20/get-the-cisco- snmp 上的配置/

这是我的高级设置。在路由器上:

R1(config)# username cisco password cisco
R1(config)# ip domain-name somedomain.com
R1(config)# crypto key generate rsa general-keys modulus 1024
R1(config)# aaa new-model
R1(config)# aaa authentication login cisco local
R1(config)# aaa authorization exec cisco local
R1(config)# ip scp server enable
R1(config)# line vty 0
R1(config)# login authentication cisco
R1(config)# snmp-server community cisco RW

为了让路由器充当SCP服务器,需要使用上面的cmd来启用。在 ubuntu 服务器上,我安装/运行了 openSSH 并执行以下命令:

snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.2.111 i 4
snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.3.111 i 4
snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.4.111 i 1
snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.5.111 a <svr ip addr>
snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.6.111 s cisco.txt
snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.7.111 s cisco
snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.8.111 s cisco
snmpset -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 1

然后为了检查状态是什么,我通过以下方式执行 snmpget 和/或 snmpwalk:

snmpwalk -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.10.111

当我运行它时,我得到整数 (2),这意味着它正在运行,然后它变为整数 (4),这意味着它失败了。

然后我检查失败的原因:

snmpwalk -c cisco -v 2c <router ip addr> 1.3.6.1.4.1.9.9.96.1.1.1.1.13.111

我得到整数 (2),意思是“坏文件名”。

所以我尝试了上面“.6.111 字符串”的文件名的不同排列,包括不同的文件扩展名,带和不带连字符,与运行配置 cmds 相同的文件名,甚至指定的绝对路径文件名,但似乎都不起作用。

我尝试sshd使用各种日志记录级别调试它,但没有从保存/存储的 syslog 文件中获得任何输出。

有没有人能够让这个工作?

4个回答

我刚刚在我的 CPE 上试过这个:

[ytti@lintukoto ~]% cat moi2.sh 
#!/bin/sh

snmp="snmpset -v2c -cfoo bu.ip.fi"

$snmp 1.3.6.1.4.1.9.9.96.1.1.1.1.2.9 i 4 \
      1.3.6.1.4.1.9.9.96.1.1.1.1.3.9 i 4 \
      1.3.6.1.4.1.9.9.96.1.1.1.1.4.9 i 1 \
      1.3.6.1.4.1.9.9.96.1.1.1.1.5.9 a 91.198.120.2 \
      1.3.6.1.4.1.9.9.96.1.1.1.1.6.9 s filename \
      1.3.6.1.4.1.9.9.96.1.1.1.1.7.9 s username \
      1.3.6.1.4.1.9.9.96.1.1.1.1.8.9 s password \
      1.3.6.1.4.1.9.9.96.1.1.1.1.14.9 i 4
sleep 10
$snmp 1.3.6.1.4.1.9.9.96.1.1.1.1.14.9 i 6
[ytti@lintukoto ~]% 

将运行配置(4)复制到网络(1),通过交换这些可以改变方向(从网络到运行)。

运行上面的脚本,我的主目录将有“文件名”文件,其中包含我的 CPE 运行配置:

[ytti@lintukoto ~]% ls -la filename
ls: cannot access filename: No such file or directory
[2 ytti@lintukoto ~]% ./moi2.sh      
iso.3.6.1.4.1.9.9.96.1.1.1.1.2.9 = INTEGER: 4
iso.3.6.1.4.1.9.9.96.1.1.1.1.3.9 = INTEGER: 4
iso.3.6.1.4.1.9.9.96.1.1.1.1.4.9 = INTEGER: 1
iso.3.6.1.4.1.9.9.96.1.1.1.1.5.9 = IpAddress: 91.198.120.2
iso.3.6.1.4.1.9.9.96.1.1.1.1.6.9 = STRING: "filename"
iso.3.6.1.4.1.9.9.96.1.1.1.1.7.9 = STRING: "username"
iso.3.6.1.4.1.9.9.96.1.1.1.1.8.9 = STRING: "password"
iso.3.6.1.4.1.9.9.96.1.1.1.1.14.9 = INTEGER: 4
iso.3.6.1.4.1.9.9.96.1.1.1.1.14.9 = INTEGER: 6
[ytti@lintukoto ~]% ls -la filename
-rw-r--r-- 1 ytti ytti 16172 Jun 11 00:35 filename
[ytti@lintukoto ~]% 

除了@daniel 提到的“14”或“rowstatus”也是错误的,您使用 1 个“active”,而您应该使用 4 个“createAndGo”。

根据 Cisco SNMP Object Navigator,1.3.6.1.4.1.9.9.96.1.1.1.1.3 不支持值 4。相反,值 2 表示运行配置:

Object  ccCopySourceFileType
OID     1.3.6.1.4.1.9.9.96.1.1.1.1.3
Type    ConfigFileType
1:startupConfig
2:runningConfig
Permission  read-create

可能这就是您收到 badFileName 错误的原因。

编辑:

实际上似乎 SNMP Object Navigator 和MIB Definition之间存在矛盾,因为类型为ccCopySourceFileTypeand ccCopyDestFileTypeisConfigFileType并且根据 MIB 定义:

ConfigFileType ::= TEXTUAL-CONVENTION

SYNTAX          INTEGER  {
                        networkFile(1),
                        iosFile(2),
                        startupConfig(3),
                        runningConfig(4),
                        terminal(5),
                        fabricStartupConfig(6) }

这似乎得到了 ytti 的回答的支持

我以前发过这个:http : //checkforbees.com/router-backup/

我认为您的问题与多个 snmpset 有关。您必须首先创建条目才能执行此操作。[14.xxx = 5 (createAndWait)] 然后您可以在将 rowStatus 设置为“1”(活动)之前根据需要设置条目。

[注意:我的脚本已有数十年历史,因此它们已针对 tftp 进行了调整。]

[root:pts/6{8}]debian1:/tmp/[01:32 AM]:./test.sh
CISCO-CONFIG-COPY-MIB::ccCopyProtocol.111 = INTEGER: scp(4)
CISCO-CONFIG-COPY-MIB::ccCopySourceFileType.111 = INTEGER: runningConfig(4)
CISCO-CONFIG-COPY-MIB::ccCopyDestFileType.111 = INTEGER: networkFile(1)
CISCO-CONFIG-COPY-MIB::ccCopyServerAddress.111 = IpAddress: 192.168.55.25
CISCO-CONFIG-COPY-MIB::ccCopyFileName.111 = STRING: cisco.txt
CISCO-CONFIG-COPY-MIB::ccCopyUserName.111 = STRING: cisco
CISCO-CONFIG-COPY-MIB::ccCopyUserPassword.111 = STRING: cisco
CISCO-CONFIG-COPY-MIB::ccCopyEntryRowStatus.111 = INTEGER: active(1)
..
Status: successful []
CISCO-CONFIG-COPY-MIB::ccCopyEntryRowStatus.111 = INTEGER: destroy(6)
[root:pts/6{8}]debian1:/tmp/[01:32 AM]:ls -l cisco.txt
-rw-r--r-- 1 root root 15790 Jun 12 01:32 cisco.txt

我在“运行”时循环 ...10.111(状态)。我怀疑您从未删除过“111”条目。否则,这些是您snmpset使用 linux 机器的 ssh 服务器针对 2960S 的确切序列(正如我的提示所暗示的,一个 debian 框。)

在此处查看:如何在使用 SNMP 的 Cisco IOS 路由器之间复制配置文件

更改ccCopyProtocol为您想要的传输方式:

  1. 文件传输协议
  2. FTP
  3. 接收器
  4. SCP
  5. sftp

这是一个自动化配置备份bash 脚本