交换机上开 FTP 这个操作,说小很小,ftp server enable一行命令就完事;说大也大,我见过不止一次因为在生产设备上随手开了 FTP、账号给了最高权限、ACL 没做,最后被安全扫描直接通报的情况。这篇就围绕华为交换机 FTP 配置这条路,把从"什么时候该开"到"怎么配才不出事"再到"传文件传一半断了怎么查"的完整链路掰开讲一遍。它不是一份命令手册,而是我在实际割接、升级、配置回滚这些场景里反复用过的一套做法,中间穿插几个版本差异和踩过的坑。适合刚接手网络运维、需要独立完成设备升级和配置备份的人看,也适合已经会用但没系统梳理过安全边界的老手对照检查。
1. 交换机自带 FTP 服务器,什么时候值得开
1.1 一次没有 TFTP 工具的夜间升级
先说个真实场景。某次夜间窗口,要把一套接入层设备的系统镜像统一升上去。计划是笔记本接管理口,用 TFTP 把镜像推上去。结果到了现场才发现,随行那台笔记本是新装的系统,TFTP 服务端软件压根没装,离线的安装包也没带,机房又没有外网。当时有三条路:回去拿 U 盘拷软件、找一台机器临时搭服务、或者干脆用交换机自己的 FTP 服务器反过来从笔记本上传。
第三条路最快。交换机开启 FTP 服务,笔记本作为客户端put镜像上去,十分钟搞定。从那之后我的习惯就变了:升级之前先确认设备能不能自己当 FTP 服务器,能的话就不依赖外部 TFTP 工具,少一个环节少一个故障点。
这就是交换机 FTP 功能最核心的价值——它不是让交换机去当文件服务器给一堆人用,而是给运维人员提供一个"设备自己开门,让你把文件放进 flash 或者取出来"的通道。
1.2 四种文件传输方式在现网里的分工
很多人一上来就问"到底用 FTP 还是 TFTP",其实这几个协议在交换机运维里分工挺明确的,选错了不是不能用,是效率和安全上吃亏。
| 方式 | 典型用途 | 认证 | 传输可靠性 | 适用场景 |
|---|---|---|---|---|
| TFTP | 镜像上传、配置下发 | 无认证 | 无校验,UDP 传输 | 内网临时操作,速度快但不可靠 |
| FTP | 配置备份、日志导出、镜像上传 | 用户名密码 | TCP,有确认 | 需要认证的日常运维 |
| SFTP | 同上,且要求加密 | 用户名密码或密钥 | TCP + SSH 加密 | 跨网段、有合规要求的环境 |
| 本地存储 | U 盘、SD 卡 | 物理接触 | 依赖介质 | 完全没有网络通道时的兜底 |
TFTP 的优点就是简单、开销小、很多老设备只支持它,缺点同样明显:没有认证、没有完整性校验、UDP 丢包会导致文件损坏而不报错。我遇到过用 TFTP 传镜像传完校验失败、重传三次才对的情况,就是因为链路上有丢包。
FTP 走 TCP,有确认重传机制,还带用户名密码认证,适合需要留痕、需要区分权限的运维动作。缺点只有一个,但很致命:明文传输,账号密码在网络上是裸奔的。这一点后面单独讲。
SFTP 是 FTP 的加密版本,走 SSH 通道,配置上比 FTP 多几步,但如果是跨网段、经过防火墙、或者有等保要求的环境,我基本都会直接上 SFTP,不给 FTP 开口子。
1.3 开 FTP 之前必须先想清楚的两件事
第一件事:这台设备的管理面是不是暴露在不可信网络里。如果交换机的管理地址能被办公网、甚至更外面的地址访问到,那开 FTP 就等于在明文通道上挂了个用户名密码,风险不小。这种环境要么做 ACL 白名单,要么直接改用 SFTP。
第二件事:这个 FTP 账号的权限级别给到多少。华为设备的用户级别从 0 到 15,级别越高能动的配置越多。FTP 用户的权限级别直接决定了他登录后能不能删文件、能不能覆盖配置文件。给 15 是方便,但一旦这个账号泄露,等于把设备的完全控制权交出去了。
我个人的原则是:临时用、用完就关;长期用、必须绑 ACL。这两条不满足任何一条,就不在生产设备上常开 FTP。
2. 配置之前先摸清家底:管理地址、账号权限、flash 目录
2.1 管理接口地址与客户端可达性验证
FTP 能不能通,第一关不是配置对不对,是网络通不通。交换机作为 FTP 服务器,必须有一个客户端能访问到的地址。常见的有三种:管理网口(MEth 口)单独配地址、业务口上起 VLANIF 配管理地址、或者带外管理口。
配置之前先在设备上确认地址:
display ip interface brief看哪个接口有地址、状态是不是 up。然后从客户端侧ping一下这个地址,确保三层可达。这一步看着废话,但我确实遇到过配置全对、就是连不上,最后发现客户端和交换机管理地址不在同一个网段、中间缺路由的情况。
还有一个容易忽略的点:交换机的管理地址有时候是通过 VLANIF 提供的,而接客户端的那个物理口不一定属于这个 VLAN。这种情况 ping 不通但配置没错,需要检查端口归属。
display vlan display port vlan如果设备有管理网口(MEth),优先用管理口,因为它的转发路径独立于业务转发面,业务口震荡的时候管理通道还在,做升级这种操作更稳。
2.2 AAA 用户的权限级别决定 FTP 能做什么
华为设备的本地用户是在 AAA 视图下建的,FTP 用户也不例外。关键参数有三个:密码、级别、服务类型。
级别这块要说清楚。VRP 的用户级别 0 到 15,粗分是:0 参观级、1 监控级、2 配置级、3 到 15 管理级。FTP 用户要能读写 flash 里的文件,级别给低了会出现"能登录、能ls、但put不上去"或者"能进目录、看不到文件"的现象。
我一般直接给 15,理由是文件操作本身就需要管理级权限,给 3 到 14 之间意义不大,反正都能碰文件系统。真正控制风险的应该是 ACL 和账号生命周期,而不是在级别上抠。
密码这块,华为现在的版本对密码复杂度有强制要求,纯数字、纯字母、长度不够都会报错。用irreversible-cipher存密码,配置里看到的是密文。
有个细节:老版本用
cipher,新版本推荐irreversible-cipher,两者在配置回显里长得不一样。如果你是照着老文档敲的,命令报错大概率是版本差异,换成irreversible-cipher就行。
2.3 flash: 的目录规则和空间余量
FTP 用户登录之后落到哪个目录,是由ftp-directory决定的。不配这个参数,用户登录后没有默认目录,执行dir会报错或者列不出东西,这是新手最常卡住的地方。
在配之前先看看 flash 里有什么:
dir flash:/正常的输出里能看到系统镜像(.cc结尾)、配置文件(vrpcfg.zip)、补丁文件(.pat),有的设备还有日志目录。上传镜像之前必须确认剩余空间够大,一个系统镜像动辄几百兆,flash 空间不够会直接导致上传失败,而且失败提示不一定直观。
dir flash:/ | include Free有的版本直接显示剩余字节,有的需要用display flash-info之类的命令看。空间余量我一般留出镜像大小的 1.5 倍,因为升级过程中新旧镜像会同时存在一段时间。
另外,flash 是只读文件系统加可写分区的组合,某些目录(比如系统保留区)是写不进去的,FTP 上传到这些路径会报权限或者路径错误。默认落在flash:/根目录是安全的。
3. 完整配置链路:从开启服务到 ACL 收紧
3.1 全局使能 FTP 服务与端口调整
华为交换机默认 FTP 服务是关闭的,需要手动开。进系统视图:
system-view ftp server enable就这两行,服务起来了。默认监听 21 端口。如果因为某些原因要改端口:
ftp server port 2121改端口这个操作在真实环境里不常用,因为客户端也得跟着改,反而增加沟通成本。真正有价值的是下面几个参数:
ftp server timeout 30 ftp server max-sessions 3timeout是空闲超时,单位分钟,默认值比较长。我一般设短一点,避免有人登录后挂着不动占着会话。max-sessions限制并发会话数,防止被暴力尝试打满。
新一点的版本还支持指定源地址和绑定 ACL:
ftp server source-ip 192.168.10.1 ftp server acl 2000source-ip在多地址设备上很有用,指定 FTP 服务用哪个地址对外,避免客户端连到错误的接口地址上。acl就是白名单,下一小节细说。
开完服务用这条命令确认状态:
display ftp-server输出里能看到服务是否使能、端口、当前会话数、超时时间。配完不验证等于没配,这条命令建议养成习惯。
3.2 建本地用户并绑定服务类型和目录
服务开起来之后,还得有账号能登录。完整的一套:
aaa local-user netops password irreversible-cipher NetOps@2024 local-user netops privilege level 15 local-user netops service-type ftp local-user netops ftp-directory flash: quit逐条说意图。
local-user netops password irreversible-cipher ...建账号设密码,密文存储。
privilege level 15给管理级,前面解释过原因。
service-type ftp这个参数是关键,它决定了这个账号能通过哪种方式登录。华为的本地用户可以绑定多种服务类型,比如ssh、telnet、ftp、http。不绑ftp,账号密码再对也登不上 FTP,会直接返回 530。我见过有人建了账号、测了半天密码,最后发现是service-type只写了ssh。
ftp-directory flash:指定登录后的默认目录。这里有个格式坑:不同版本文档里有的写flash:,有的写flash:/,实际测试下来两种大多都能识别,但如果你的版本报错,换成带斜杠的写法再试一次。要指定子目录就写flash:/backup,前提是这个目录已经存在,不存在的话用mkdir flash:/backup先建。
一个账号要同时支持 SSH 和 FTP,把服务类型写在一起就行:
local-user netops service-type ssh ftp3.3 用 ACL 把访问源限制到运维网段
这一步是我认为整个配置里最重要的,比开服务本身重要得多。FTP 是明文协议,一旦被不可信的地址连上,账号密码就等于交出去了。用 ACL 把源地址锁死,是成本最低的防线。
acl number 2000 rule 5 permit source 192.168.10.0 0.0.0.255 rule 10 deny quit这是一条基本 ACL,只允许 192.168.10.0/24 这个网段访问,其他全部拒绝。注意华为的基本 ACL 用的是反掩码,0.0.0.255对应/24。
然后把这个 ACL 绑到 FTP 服务上:
ftp server acl 2000绑完之后,只有这个网段能建立 FTP 连接,其他地址连 TCP 握手都过不去。这种限制比在账号密码上做文章可靠得多,因为它是网络层的。
提醒一句:ACL 写完之后一定要用
display acl 2000核对一遍,尤其是反掩码容易写错。我踩过一次把0.0.0.255写成0.0.0.0的坑,结果整段网段只放行了一个地址,排查了十几分钟才发现是掩码问题。
如果你的版本不支持ftp server acl,退而求其次的办法是在管理接口或者 VLANIF 上做流量过滤,或者用ftp server source-ip配合上层防火墙策略。老版本的功能缺失只能靠外围补。
3.4 保存配置并做一轮自验证
配置敲完不保存,重启就全没了。这一步不用多说,但顺序有讲究:先验证,再保存。
验证清单我一般按这个顺序走:
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| 服务状态 | display ftp-server | 显示 enabled,端口、超时正确 |
| 用户信息 | display local-user | 账号存在,服务类型含 ftp |
| 目录配置 | display current-configuration | include ftp-directory | 指向 flash: |
| ACL 绑定 | display ftp-server | 输出中含 ACL 编号 |
| 实际连接 | 客户端ftp <设备地址> | 能登录、能dir |
实际连接这一步不能省。配置回显全对但连不上的情况,根源往往在网络层或者客户端侧,只有真连一次才知道。
全部通过之后再保存:
save保存的时候设备会提示确认文件名,直接回车用默认的vrpcfg.zip就行。如果这台设备之前有过配置回滚需求,建议在 save 之前先 FTP 把当前配置备份一份出来,顺序别搞反了。
4. 客户端实操:备份配置、升级镜像、导出日志
4.1 命令行 FTP 客户端的完整会话
Windows 自带 FTP 客户端,Linux 和 macOS 更不用说,不用装任何额外软件。一个完整的备份会话长这样:
ftp 192.168.10.1 Connected to 192.168.10.1. 220 FTP service ready. User (192.168.10.1:(none)): netops 331 Password required for netops. Password: 230 User logged in. ftp> binary 200 Type set to I. ftp> dir 200 Port command okay. 150 Opening ASCII mode data connection for file list. vrpcfg.zip ... ftp> get vrpcfg.zip 200 Port command okay. 150 Opening BINARY mode data connection. 226 Transfer complete. ftp> bye 221 Service closing control connection.这个会话里有几个动作值得单独说。
binary这一行是必须的。默认 FTP 客户端用 ASCII 模式,会把文件里的换行符做转换,二进制文件(比如.zip、.cc)走 ASCII 模式传完必然损坏。上传下载任何交换机文件之前,第一件事就是敲binary,这是我踩过最多次的坑,没有之一。
dir用来确认文件名,交换机上的文件名大小写敏感,vrpcfg.zip和VRPCFG.ZIP是两个东西,get的时候名字错一个字符就是 550 报错。
get是从设备下载到本地,put是从本地上传到设备。方向别记反,put是"推上去"。
4.2 二进制模式:配置文件与镜像都不能用 ASCII
前面提过binary的重要性,这里展开说原因,因为理解了原因才不会忘。
FTP 的 ASCII 模式设计初衷是让不同操作系统的文本文件换行符能互通:Windows 用\r\n,Unix 用\n。传输时客户端和服务端会做转换。对于纯文本、而且只关心人眼可读的场景,这没问题。但交换机的配置文件vrpcfg.zip是个压缩包,里面是二进制数据,任何字节被改动都会导致解压失败或者校验不过。系统镜像.cc更是完全二进制。
ASCII 模式下传完的文件,体积可能都不对了,设备加载时会报校验失败或者直接拒绝。更麻烦的是,这种损坏有时候不报错,等真正需要回滚配置的时候才发现备份是废的。
所以我的习惯是:连上 FTP 第一件事binary,不看文件类型,一律二进制模式。纯文本用二进制模式传也不会有问题,反过来就有。
用文件传输工具(比如图形化客户端)的话,同样要确认传输模式设置成 binary,有些工具默认按扩展名判断,.txt、.cfg会被当成文本,这时候要手动改。
4.3 配置文件回滚的完整链路
备份出来的配置文件怎么用回去,这个链路很多人只做过前半段。
先把文件传上去:
ftp> binary ftp> put vrpcfg_backup.zip传完在设备上确认文件到位:
dir flash:/然后指定下次启动用这个配置:
startup saved-configuration vrpcfg_backup.zip这条命令执行后,设备重启才会加载新指定的配置。注意是下次启动生效,不是立即生效,这点和很多人想的不一样。
确认一下启动配置指向:
display startup输出里能看到"下一次启动配置文件"和"当前启动配置文件"两行,确认前者指向你要的文件。
要立即生效就重启:
reboot重启前一定确认设备已经保存了当前该保存的东西,因为重启会丢未保存配置。这种操作在业务设备上要做窗口,别在白天随手干。
还有一条更轻量的回滚路径:如果只是改错了几行配置,不涉及整体回滚,直接在设备上把错误配置 undo 掉,比走 FTP 快得多。FTP 备份的价值在于"配置被改乱了、需要整体回到某个已知状态"。
4.4 大文件传输的断点与超时处理
系统镜像动辄几百兆,传输时间长,中途断掉是常事。断了之后 FTP 一般不支持续传(VRP 的 FTP 服务端不支持 REST 命令),只能重来。
降低中断概率的做法有几个。
一是先在本机做校验,传之前在设备上看 flash 剩余空间,传之后再用dir比对文件大小。有的版本支持display system-software之类的命令看镜像完整性,能用就用。
二是调整超时参数。如果传输过程中控制连接空闲超过ftp server timeout设置的值,服务端会主动断开。传大文件时控制连接一直在发确认,一般不会触发,但如果中间有网络抖动导致停顿,就可能被踢。可以把 timeout 设长一点,或者干脆临时设大。
三是用有线连接,别用无线。这个听起来像废话,但真有人图省事笔记本连 Wi-Fi 传镜像,中间信号一波动就断,重传三次还不如插根网线。
四是分批传。如果镜像能拆分(有些版本支持),或者先传小文件验证链路,再传大文件,能提前发现问题。我一般会先put一个小配置文件试水,成功了再传镜像。
5. 排障实录:登录失败、传输中断、目录不可写
5.1 530 与 421 报错的定位顺序
FTP 的报错码就那么几个,但每个背后的原因可能有好几种。按我遇到的频率排一下。
530 Login incorrect,登录失败。这是出现最多的。原因按可能性排:账号密码错(最常见,别笑,大小写和特殊字符最容易错)、service-type没绑 ftp、账号被锁定、ACL 把源地址挡了但表现成登录失败。
定位顺序:先在设备上display local-user确认账号存在、服务类型包含 ftp、状态不是 blocked;再到客户端确认密码输入正确,特别是密码里有@、#这类字符时,某些客户端会做特殊处理。
421 Service not available,服务不可用。这个通常意味着 FTP 服务没开,或者连接数超了max-sessions。先display ftp-server看服务状态和当前会话数。
425 Can't open data connection,数据连接建立失败。这个基本就是主动模式/被动模式的问题,下一小节细说。
550 文件或目录不存在/权限不足。get或put时文件名写错、路径不对、或者用户权限不够、flash 满了,都会报类似错误。先dir确认文件名,再确认空间。
5.2 被动模式在跨网段场景下的失效
FTP 的工作模式分主动(PORT)和被动(PASV),这个机制不了解的话,跨网段的排障会非常痛苦。
简单说,主动模式是客户端告诉服务端"你来连我的某个端口",如果客户端在 NAT 或者防火墙后面,服务端连不进去。被动模式是服务端开一个临时端口等客户端来连,但如果服务端的这个端口被防火墙挡了,也连不上。
华为交换机的 FTP 服务端在较新的版本里支持被动模式,老版本只支持主动模式。当你从跨网段的客户端去连,控制连接能建立(能登录、能敲命令),但一执行dir或者get就卡住或者报 425,大概率就是数据连接被中间设备挡了。
处理办法有两条:客户端侧强制用主动模式(大多数命令行 FTP 客户端默认就是主动),或者让网络侧放行相关端口段。实际排查时先看控制连接是否正常——能登录说明 21 端口通了,问题出在数据连接上,这个判断能省很多时间。
5.3 上传失败先看 flash 余量和文件锁
上传镜像失败,提示空间不足或者写入错误,第一件事看空间:
dir flash:/看剩余空间是不是小于文件大小。空间不够就删旧文件,删之前确认这个文件不是当前启动用的镜像:
display startup确认不是当前镜像、也不是下次启动镜像,再delete。删除的时候设备会问是否彻底删除,delete /unreserved是不进回收站直接删,空间才真正释放。普通delete只是标记,空间不一定马上回来。
第二个要查的是文件是不是被占用。系统正在使用的镜像文件、正在写入的日志文件,是不允许覆盖或者删除的,会报文件忙。这种情况要么换个文件名传,要么等占用释放。
第三个是路径。ftp-directory指向flash:/,但客户端put的时候如果写了绝对路径或者上级目录,会被拒绝。稳妥的做法是登录后先pwd确认当前目录,然后用相对路径操作。
5.4 几个只有实际做过的才知道的细节
说几个文档里不太会写、但实际会碰到的。
账号密码里的特殊字符。密码含@时,某些 FTP 客户端的命令行解析会把它当成参数分隔符,导致密码被截断。解决办法是用交互式登录(连上去之后再输密码),而不是在命令行里拼ftp user:pass@host这种格式。
同一账号并发登录。华为设备对同一账号的并发会话数有限制,如果之前有个会话没正常退出(网络断了导致),再登录可能被拒。用display ftp-user看当前在线会话,必要时在设备侧踢掉。
文件名的中文和空格。交换机 flash 里的文件名如果有空格或者特殊字符,FTP 客户端解析会出错。上传前把文件名改成纯英文数字下划线,省事。
配置回显里的密码是密文。display current-configuration看到的 FTP 账号密码是加密的,没法反向还原。如果密码忘了,只能重新设,别指望从配置里找回来。
改了 ACL 之后老会话不受影响。ACL 是在建立连接时检查的,已经建立的会话不会因为 ACL 变更而断开。要立即生效得手动清会话或者重启服务。
6. 收尾不谈总结,谈安全边界和更优替代
6.1 FTP 明文传输的风险边界
前面反复提过,FTP 的账号密码和数据都是明文。这意味着在同一条链路上的任何抓包点,都能直接看到你的用户名密码,以及传输的配置文件内容(配置里有各种密码的密文,虽然不能直接还原,但也是敏感信息)。
风险边界在哪:如果客户端和交换机之间的链路完全在可控的内网、没有旁路监听的可能,风险相对可控;一旦跨越不可信网段、或者链路上有其他租户/部门,就不该用 FTP。
这种情况下,要么用 ACL 把访问源限制到极小范围(前面讲的做法),要么直接换 SFTP。ACL 解决的是"谁能连",加密解决的是"连上之后看不看得见",两者不是一个层面的东西,不能互相替代。
6.2 用 SFTP 替代 FTP 的配置对照
如果环境有合规要求,直接在交换机上配 SFTP,配置量和 FTP 差不了太多:
stelnet server enable ssh user netops authentication-type password ssh user netops service-type sftp ssh user netops sftp-directory flash: sftp server enable账号还是那个账号,把service-type加上sftp或者单独建一个。客户端用sftp netops@192.168.10.1连接,之后get、put的用法和 FTP 基本一致。
对比一下两者的差异:
| 维度 | FTP | SFTP |
|---|---|---|
| 传输加密 | 无 | SSH 加密 |
| 默认端口 | 21 | 22 |
| 客户端依赖 | 系统自带 | 系统自带(OpenSSH) |
| 配置复杂度 | 低 | 略高,需开 SSH 服务 |
| 大文件性能 | 略高 | 略有开销,可接受 |
| 合规适配 | 多数环境不满足 | 满足 |
性能上 SFTP 因为加密有一点点开销,但传几百兆的镜像实际差异很小,不值得为了这点速度去冒明文传输的风险。
6.3 用完就关:临时开启的操作习惯
最后说一个习惯层面的东西。
如果 FTP 只是临时用一次,比如今晚要升级、明天就不用了,那就用完关掉:
undo ftp server enable账号也可以一并删掉:
undo local-user netops我见过太多设备上留着一堆历史账号、FTP 服务常年开着、ACL 也没配的情况,这些都是在给未来的自己埋雷。临时开、用完关,这个动作花不了三十秒,但能省掉后面一堆安全整改的麻烦。
另外一个我个人一直在用的做法:给 FTP 操作用单独的账号,不复用日常登录的运维账号。这样从日志里能一眼看出哪些操作是通过文件传输通道做的,出了问题定位范围小很多。账号名起得有辨识度一点,比如带ftp前缀,配合display logbuffer查操作记录会方便很多。
这套流程我在不同规模的现网里都用过,核心就三件事:网络先通、权限给够但范围锁死、传之前先binary。剩下的细节都是在这三件事上打补丁。