交换机开了SSH却一直连不上,是哪里没配到位

不少网管在华为交换机上配 SSH 都踩过这一步:命令敲了一串,自以为开好了,拿 SecureCRT 或 Xshell 一连,要么提示连接被拒绝,要么停在密钥交换那一步不动,而同一台设备 telnet 反而能登。设备没坏,配置也保存了,问题到底卡在哪。

原因分析

SSH 能不能登,取决于一条链路上的五个环节是不是都齐了:设备侧的 stelnet 服务有没有使能、本地密钥对有没有生成、登录账号有没有开通 ssh 服务类型、虚拟终端(vty)通道允不允许 ssh 协议进来、客户端首次连接的公钥交互处理对不对。这五环任何一环缺失,表现都是连不上,但报错出现的位置和形态不一样:连接直接被拒绝,多半是服务没开或端口不对;能建上连接、卡在协商阶段,指向密钥对缺失或版本不匹配;密码反复报错,则要怀疑账号服务类型。「telnet 能登、ssh 不能登」这个组合,基本可以排除网络不通和账号密码本身错误,把排查面收窄到 ssh 自己的这几个配置点上。另外提醒一句,管理口如果做了 ACL 或映射过端口,先确认安全策略放行的是 22 号端口的新地址,别在 ssh 配置里空转半天。

分步解决

  1. 先确认服务真的开了。console 或 telnet 登上去执行 display ssh server status,看 STELNET 一栏是不是 Enable。不是的话,进系统视图执行 stelnet server enable,再看一次确认。相当一部分连不上到这一步就解决了——只配了用户没开服务,属于低级但高频的漏项。
  2. 查本地密钥对有没有生成。执行 display rsa local-key-pair public,如果提示密钥对不存在,说明漏了 rsa local-key-pair create。没有本地密钥对,客户端连上来在密钥交换阶段就会被拒,典型表现是 TCP 能建立、停顿几秒后报协商失败。生成主密钥后可以再补一份 ecc 密钥,新老客户端都照顾到。
  3. 核对账号的服务类型display local-user 看登录用的那个账号,服务类型里必须包含 ssh。很多账号当初是照着 telnet 教程建的,服务类型只写了 telnet 或 web,密码再对,ssh 认证也过不去。进 local-user 视图补上 service-type ssh,需要保留原有登录方式就一项项都写上。
  4. 检查 vty 通道的入协议和认证方式user-interface vty 0 4 视图下 display this,看 authentication-mode 是不是 aaa、protocol inbound 是不是 ssh 或 all。protocol inbound 只写了 telnet 时,ssh 的连接请求在通道这一层就被挡掉,服务开着也登不进去,这是 telnet 能登、ssh 不能登的另一个常见根因。
  5. 处理好客户端首次连接。头一回连新设备,客户端会问是否保存服务器公钥,选接受并保存;如果之前连过这台设备、设备又重新生成过密钥,客户端会报公钥不匹配,把本地保存的旧条目删掉重连即可。都通过后再 display ssh session-all 看一眼,有自己的会话在列,这条管理通道才算真正打通。排查全程建议从 console 口挂着不动手,改一项验一项,避免把 console 这条入口也改丢。

预防

新设备上线时把「开服务、生密钥、配账号、通通道」四个动作固化成一张小检查单,逐项打勾再交付;日常管理优先走 ssh、关掉明文传输的 telnet,管理网段前面再配一条 ACL 只放行网管终端。诚鑫致达科技给客户做交接时,习惯把 ssh 主通道和 console 备用通道写成交接单上的两行明细,谁接手都先照单各连一遍——管理通道留两条且都验证过,后面换人维护也不至于被锁在设备外面。