深入剖析Cisco SDM安装过程及对路由器Flash卡进行文件传输的RCP、SCP协议

事情的起因源于需要对路由器的Flash卡进行远程读写操作,就是上传下载文件。由于以前只对ftp、tftp之类的服务熟悉,所以在查看cisco的设备资料后发现,普适性不是很高,主要在如下几点:

1、ftp server不是什么型号、什么特性集的IOS上都有,低端设备和低端IOS如IPbase的特性集上不具备ftp server的功能。

2、tftp server就更加受到cisco的限制,在路由器上开启tftp都是要指定文件名,即对于cisco的设计理念来讲,tftp只是一个保存路由器资料到别的地方的方式,连写flash和创建文件的权限都没有。

 

那么究竟有什么办法能够即最小量的修改配置,又能实现远程对路由器flash卡进行读写上传下载文件的操作呢,而且这个文件还不能是flash卡里的已有文件,必须是可以自定义的任意文件。

 

在这个思路的指导下,首先想到了SDM,这个管理软件是cisco在主流路由器上力推的软件,SDM有一种管理方式是安装到路由器上,这样就不需要带有SDM的客户端,即可访问http或者https,得到SDM的管理界面。那么问题就来了,cisco是通过什么方式把文件上传到路由器上的呢?既然cisco用这种方法上传,只要不是它私有的封装或者只认证cisco客户端的通讯方式,那么很有可能就是用一种简便的而且普适性较强的方式,那么这种方法必然可以为我所用。

 

 

首先我们观察下cisco采用了什么管道上传文件的。

打开SDM的安装界面:

深入剖析Cisco SDM安装过程及对路由器Flash卡进行文件传输的RCP、SCP协议

 

填写好测试用的IP地址后,就可以下一步了。

深入剖析Cisco SDM安装过程及对路由器Flash卡进行文件传输的RCP、SCP协议

 

通过查看连接,发现采用ssh和路由器通讯。中途会小开个80端口,其实在设备上开了80的用户密码认证也是可以的。因为这一步主要是和设备通讯,执行指令,这些指令检查设备的型号、IOS、环境等看是否便于安装SDM。

深入剖析Cisco SDM安装过程及对路由器Flash卡进行文件传输的RCP、SCP协议

 

检查完成以后会弹出窗口,选择安装类型,

深入剖析Cisco SDM安装过程及对路由器Flash卡进行文件传输的RCP、SCP协议

 

然后下一步就开始安装了,注意到,这里SDM开始启动路由器的RCP协议。

深入剖析Cisco SDM安装过程及对路由器Flash卡进行文件传输的RCP、SCP协议

 

查看连接发现打开了514端口,这个端口正是RCP的端口。

深入剖析Cisco SDM安装过程及对路由器Flash卡进行文件传输的RCP、SCP协议

然后RCP打开以后,就是复制文件,复制完成安装就结束了

 

在这里我做了个测试,因为有个疑惑,众所周知的是,22和514协议都是可以传输文件的,22用的是ssh,具备远程执行命令和传输文件的能力,514是Rcmd,也就是RSH和RCP这一家,也具备远程执行命令和传输文件的能力;那么SDM究竟用了哪个协议执行命令,哪个协议传输文件呢?

 

我的测试是,如果中途用防火墙关闭22端口的出连,将会报“和路由器通讯出错,终止安装”。如果关闭514端口,会报“复制文件操作失败”,那么很显然,SDM是用22通讯,用514传文件了。

 

那么RCP协议应该是具备用户密码就可以对路由器上传输和下载任意文件了。下面我们来尝试RCP传输文件如何实现。

 

前面在测试SDM安装的时候,我中途关闭了SSH访问,结果SDM装了一半,并且在路由器上留下了如下信息:

ip rcmd remote-host sdmR15dbbdf7 192.168.0.31 L15dbbdf7 enable 
ip rcmd remote-host sdmR1e877f9a 192.168.0.31 L1e877f9a enable 
ip rcmd remote-username sdmR1e877f9a

 

显然,RCP的配置就是按照如上语句来的,通过查看资料,对RCP有了解后开始RCP的测试:

 

首先测试什么都不开的情况下在winxp上执行rcp客户端,这里要说明的是,win7以后的系统都不具备rcp客户端,xp和2K等系统是自带的,同时,ubuntu等系统也因为安全问题,采用scp,不再采用rcp。

执行如下命令,去路由器上取一个vlan.dat文件,这个文件是路由器上flash卡里的。

C:\>rcp 10.110.0.1.cisco:vlan.dat vlan.dat 
> 10.110.0.1:连接被拒绝

 

下面打开RCP:

因为我在设备上有个cisco的15级用户,我就配置:

(config)#ip rcmd rcp-enable

(config)#ip rcmd remote-host cisco 192.168.0.39 cisco enable

其实其他参数还是好理解的,这里有点鄙视cisco等设备厂商,对参数的解释非常的“专业”。第一个cisco这个地方要填写的是“Local username”,第二个cisco填写的是“Remote username”,那么正常思维下,本地用户名,自然是在设备上已有的用户,远程用户,自然是登陆过来时候要带过来认证的用户,也就是在客户端输入的用户了。其实不然,再往下看。

 

C:\>rcp 10.110.0.1.cisco:vlan.dat vlan.dat 
10.110.0.1: Permission denied.

被拒绝了,而且没有要求输密码。

 

我们来看看是不是配置出现了错误:

#debug ip packet

#terminal monitor

通过这样的操作返回了很多无用的信息,我们换种方式:

#debug ip tap rcmd

再次测试rcp获取文件,debug信息出来了:

*Mar 26 03:51:30.931: RCMD: [514 <- 192.168.0.39:1023] recv \0 
*Mar 26 03:51:31.127: RCMD: [514 &lt;- 192.168.0.39:1023] recv Administrator\0cisco\0rcp -f home.shtml\0 
*Mar 26 03:51:31.127: RCMD: [514 &lt;- 192.168.0.39:1023] recv -- cisco 192.168.0.39 Administrator not in trusted hosts database 
*Mar 26 03:51:31.127: RCMD: [514 -> 192.168.0.39:1023] send <BAD,Permission denied.>\nsh run

 

原来,路由器发现192.168.0.39,就是我执行rcp客户端的机器来访问的时候,带过来的Administrator这个东东不在路由器的信任列表里。那我前面设置的cisco用户等于是毫无意义,换句话说,这个用户是winxp系统登陆时候的用户,也是rcp客户端默认携带的用户信息,这样的细节,rcp协议和cisco的参数里均没有详细描述,只有的unix等系统里是通过.rhosts等文件进行标注,同时互联网上的相关路由器rcp上传下载的资料基本没有,有的都是在说怎么通过路由器往别的rcp服务器上备份和恢复配置和IOS,这让很多人都无所适从。这样的情况下,就必须将winxp客户端的Administrator配置进路由器的Remote username参数,同时Local username是个可以和路由器本地用户毫无关系的账户,比如aa。

 

我们测试下: 
(config)#ip rcmd remote-host aa 192.168.0.39 Administrator enable

客户端执行:

C:\&gt;rcp -a 10.110.0.1.aa:home.tar home.tar

顺利完成,查看debug信息:

*Mar 26 04:01:29.315: RCMD: [514 <- 192.168.0.39:1023] recv \0 
*Mar 26 04:01:29.511: RCMD: [514 &lt;- 192.168.0.39:1023] recv Administrator\0aa\0rcp -f home.tar\0 
*Mar 26 04:01:29.511: RCMD: [514 -> 192.168.0.39:1023] send <OK> 
*Mar 26 04:01:29.511: RCMD: [514 <- 192.168.0.39:1023] recv &lt;OK> 
*Mar 26 04:01:29.547: RCP: [514 -&gt; 192.168.0.39:1023] send C0644 112640 home.tar\n 
*Mar 26 04:01:29.551: RCMD: [514 <- 192.168.0.39:1023] recv &lt;OK> 
*Mar 26 04:01:29.811: RCP: [514 -&gt; 192.168.0.39:1023] send 112640 bytes 
*Mar 26 04:01:29.811: RCMD: [514 -&gt; 192.168.0.39:1023] send <OK> 
*Mar 26 04:01:29.815: RCMD: [514 <- 192.168.0.39:1023] recv &lt;OK> 
 

都正常了。

以上是RCP的内容,接下来顺便测试下SCP,相对于RCP,SCP是加密传输的,要求路由器开启SSH。

我们配置:

(config)#line vty 0 15

(config-line)#transport input ssh

 

通过putty客户端里的scp工具:

D:\Greensoft\putty&gt;PSCP.EXE -scp cisco@10.110.0.1:vlan.dat vlan.dat 
Using keyboard-interactive authentication. 
Password: 
Administratively disabled.

原来光打开ssh还不够,系统里还有一个指令。

(config)#ip scp server enable

 

测试下载

D:\Greensoft\putty&gt;PSCP.EXE -scp cisco@10.110.0.1:vlan.dat vlan.dat 
Using keyboard-interactive authentication. 
Password: 
vlan.dat                  | 0 kB |   0.9 kB/s | ETA: 00:00:00 | 100%

测试上传

D:\Greensoft\putty&gt;PSCP.EXE -scp putty.chm cisco@10.110.0.1:putty.chm 
Using keyboard-interactive authentication. 
Password: 
putty.chm                 | 420 kB |  84.1 kB/s | ETA: 00:00:00 | 100%

这样就都正常了。这里SCP比RCP好的是,有链接的速率等信息显示。缺点是,scp的普适性也不是很强,低端的型号和IOS上也没有scp服务器的指令。

同时要说明的是,rcp和scp等都是可以连带子目录一起下载的,参数是-r。

 

到这里,通过rcp和scp协议就实现了对路由器flash卡进行远程任意读写操作。

 

 

最后要备注一个东东,在试验过程中,需要清除一个路由器上的配置,发现只要有生成过pki方面的东西,最终在配置里会存在一个:

crypto pki trustpoint TP-self-signed……

crypto pki certificate chain TP-self-signed……一大堆密钥的配置

这个东西在删除nvram中所有cer文件也不行,重启就会出现,这应该是出于安全的目的,毕竟ca发的证书不能随意被误删吧。





     本文转自 beansprouts 51CTO博客,原文链接:http://blog.51cto.com/netwalk/526765,如需转载请自行联系原作者


上一篇:开源IaaS ZStack本地存储使用手册


下一篇:Maven企业服务器搭建