ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

eNSP SSH登录失败三层排查:链路、服务与认证协商实战

eNSP SSH登录失败三层排查:链路、服务与认证协商实战 在eNSP里搭完拓扑接口IP配好、路由也通了、ping丢包率为0结果Xshell一敲回车就是一句连接失败或者在设备上敲stelnet之后卡在认证环节——这个场景我遇到过不下二十次身边做实验的、备考的朋友几乎人人都栽过。eNSP配置SSH登录失败这件事表面上是一个报错实际上是三层问题叠在一起链路层通不通、服务端有没有把SSH服务拉起来、认证和算法协商能不能对上。很多教程只丢一段配置让你抄抄完还是连不上因为报错信息不一样病灶完全不在一个地方。这篇就把我在eNSP上排SSH问题的一套思路完整摊开从环境准备、VRP侧配置到客户端侧排查尽量做到你看完就能自己定位而不是继续盲抄配置。1. eNSP里SSH登录失败的底层逻辑与三层排查模型1.1 为什么eNSP上的SSH问题比真机更绕真机上SSH连不上变量其实很少设备配置、网络可达性、客户端工具三样搞定基本就完事。eNSP把这个问题复杂化了因为你在PC和设备之间硬生生塞进了一个虚拟化层。你的Xshell连的到底是设备的真实接口地址还是通过云设备映射出来的本机端口这个问题如果不先说清楚后面所有排查都是瞎猜。更麻烦的是eNSP的云设备、VirtualBox的Host-Only网卡、Windows自身的端口保留策略、防火墙这几样东西任何一环出问题表现出来都是同一个现象连接超时。你从报错上完全区分不出来到底是路由器没开SSH服务还是本机2001端口根本没映射过去。我见过太多人的排查路线是连不上就去改VTY配置还连不上就去改AAA再连不上就把整台设备重启一遍。这种打法偶尔能蒙对但效率极低。正确的做法是先分层把问题切成网络能不能到服务有没有开认证过不过得去三段每一段用不同的手段验证而不是一股脑改配置。1.2 三层排查模型链路层、服务层、认证协商层第一层是链路层。判定标准很简单从客户端ping目标地址或者在eNSP里用另一台设备ping路由器接口。如果ping不通后面的SSH配置全是空中楼阁。这一层要确认的是IP地址有没有配错、接口有没有undo shutdown、云设备绑定的网卡是不是你本机那块Host-Only网卡、有没有做端口映射。很多人栽在这里却在VTY上折腾半天。第二层是服务层。判定标准是路由器上SSH服务有没有真正使能、22端口有没有在监听、VTY线路有没有放行SSH协议。这一层用几条display命令就能看清楚不需要任何客户端参与。我习惯在配置完SSH之后先在设备上敲display ssh server status和display tcp status确认服务起来、端口在听再去开客户端。这样一旦连不上就能立刻排除服务层把精力放在链路上。第三层是认证和算法协商层。这一层的特点是能连上但登不进去报错通常是Authentication failed、No matching key exchange method、无匹配的加密算法之类。问题可能出在用户名密码、权限级别、service-type也可能出在客户端和老版本VRP之间的算法代际差异上。把这三层记住你后面看任何一种报错第一反应应该是它属于哪一层而不是我该改哪段配置。1.3 先分清你用的是哪种连接方式这个必须先讲明白因为不同连接方式的排查入口完全不同。eNSP里连设备SSH常见的有三种从eNSP拓扑里的另一台路由器或交换机发起的stelnet走的是虚拟链路地址就是你配的接口地址从本机PC上的Xshell、PuTTY、FinalShell、Bitvise这类SSH工具发起中间要经过云设备映射主机直接绑Host-Only网卡PC和虚拟设备处于同一网段直接填设备接口地址连接。第三种最简单也最推荐新手用。做法是在eNSP里加一个云绑定信息选VMnet1或VMnet8VirtualBox Host-Only网卡然后把你PC这块网卡的IP改成和设备接口同网段比如设备是192.168.56.10/24PC网卡设192.168.56.1/24直接telnet/ssh 192.168.56.10就行。第二种也就是端口映射灵活但坑多。在云设备的端口映射里把路由器的接口映射到本机的某个端口客户端连127.0.0.1加端口号。坑在于本机端口可能被系统保留或者被别的程序占用映射看起来配好了实际上根本不通。第一种最干净适合验证配置本身对不对但不方便用图形化客户端。提示如果你连的是127.0.0.1加一个高位端口先确认这个端口映射到底有没有生效别把映射问题当成SSH配置问题来查。2. 动手前的环境准备把变量减到最少2.1 eNSP组件安装顺序与版本搭配先说安装。eNSP本身依赖三样东西VirtualBox、WinPcap或Npcap、Wireshark。顺序建议是VirtualBox在先Wireshark带WinPcap在后最后装eNSP本体。原因很实际eNSP安装时会去检测VirtualBox的存在如果先装eNSP它会提示缺少组件或者装完之后云设备死活起不来。版本搭配是另一个隐形雷区。VirtualBox版本太新和eNSP的兼容性会出问题典型表现就是设备启动卡在百分之几十、AR设备启动失败报错误码40、或者启动了但接口起不来。稳妥的做法是用VirtualBox 5.2.x系列的版本搭配较早期的eNSP或者直接用较新的eNSP版本搭配它官方说明里推荐的VirtualBox版本。这一步不值得省时间版本不匹配带来的问题会贯穿你整个实验过程。还有一个必须提前处理的事情Windows自带的Hyper-V、虚拟机平台、Windows沙盒、内核隔离这些东西只要开着VirtualBox就跑不利索eNSP的设备启动失败概率会大幅上升。用bcdedit或系统设置里把Hyper-V相关功能关掉重启之后再开eNSP这一步能省掉后面一大堆莫名其妙的启动问题。eNSP Pro是Web化的版本走浏览器界面和传统eNSP完全是两条路如果你的eNSP Pro离线版部署起来有问题那属于平台部署问题和本文讲的SSH排错不是一回事先把它跑通再来谈SSH。2.2 设备镜像、启动状态与拓扑图的隐性坑镜像问题表现为设备根本起不来或者起来了但命令行窗口出不来。判断方法很直接看设备图标右上角有没有变绿双击能不能进命令行。如果设备还是灰的SSH配置根本无从谈起。这里有个容易被忽略的细节eNSP拓扑里的设备名不能重复。如果你复制粘贴设备两台都叫AR1很可能有一台起不来报的错就是启动失败。养成习惯拓扑里每个设备给个有意义的名字比如AR-Border、AR-Core、SW-Access既避免重名后面写配置文档也清楚。另外eNSP对主机资源吃得不轻同时开四五台设备再开Wireshark抓包内存不够的时候设备会莫名其妙断连或者接口掉线。做SSH实验其实不需要大拓扑两台路由器加一台PC就够一台做服务端一台做客户端中间直连这样排查起来干扰最小。注意如果你是从网上下载的现成拓扑图先别急着排SSH先确认所有设备都正常启动了、接口都是up的不然你排的是别人的锅。2.3 用最小拓扑把问题复现出来我一直推荐的做法是先在最小拓扑上把SSH跑通一次拿到一份能用的配置再往复杂拓扑上迁移。最小拓扑就是两台AR路由器直连AR1做SSH服务端AR2做客户端地址用10.1.1.0/30这种极简网段。这样做的好处是一旦出现登录失败可能的变量只有那么几个你不需要在一堆VLAN、ACL、NAT规则里大海捞针。等最小拓扑通了再逐步把复杂度加回去加三层交换机、加跨网段路由、加ACL过滤每加一层测一次问题出现在哪一层一目了然。这个方法论比任何单条命令都值钱。至于eNSP清空命令行窗口、屏幕不分页这类小操作顺手提一句命令回显太长一屏一屏翻的时候敲screen-length 0 temporary可以临时关闭分页排查日志的时候省事。3. 华为VRP侧SSH服务端配置从密钥到VTY的完整落地3.1 生成RSA密钥对最容易被误判为死机的一步SSH服务端的第一件事是生成密钥对命令是AR1 system-view [AR1] rsa local-key-pair create敲下去之后系统会提示你输入模长默认2048位直接回车。接下来这一步是重点设备会显示Generating keys...然后长时间没有任何反应。在eNSP里这个过程可能要等几十秒甚至更久很多人以为设备死了直接关窗口重启结果密钥没生成完SSH服务自然起不来。正确的做法是耐心等等到出现类似下面的回显才算完成Info: The key name will be: AR1_Host The range of public key size is (512 ~ 2048). NOTES: If the key modulus is greater than 512, it will take a few minutes. Press CTRLC to abort. Input the bits in the modulus[default 2048]: Generating keys... .. ..............模长选择上512位生成快但算法太弱部分较新的客户端可能直接拒绝2048位最稳妥就是慢。日常实验我建议用2048如果嫌慢可以用1024折中一下但别用512。实操心得生成密钥这一步建议在设备启动完成、其他配置都做完之后再单独做别和其他命令混在一起敲。等的那半分钟里你可以去准备客户端的配置不要反复敲回车打断它。生成完可以验证一下[AR1] display rsa local-key-pair public能看到公钥内容就说明成功了。较新的VRP版本也支持ECC密钥对应命令是ecc local-key-pair create如果设备版本支持ECC密钥生成快、强度高是个更好的选择但要注意老版本客户端不一定认ECC算法。3.2 AAA用户密码、权限级别与service-type密钥有了接下来是开服务、建用户[AR1] stelnet server enable [AR1] aaa [AR1-aaa] local-user huawei password irreversible-cipher Huawei123 [AR1-aaa] local-user huawei privilege level 15 [AR1-aaa] local-user huawei service-type ssh [AR1-aaa] quit这几行看着简单坑却不少。第一密码加密方式。老教程里写password cipher在较新的VRP版本上可能提示不支持或者行为异常建议直接用irreversible-cipher这是不可逆加密也是目前推荐的写法。第二密码复杂度。VRP对密码是有校验的纯数字、纯字母、和用户名相同或相似的密码都可能被拒报错是密码太简单之类。实测下来密码里至少包含大小写字母加数字再加一个特殊字符长度8位以上基本不会被拦。我常用的就是Huawei123这种形式简单好记又过校验。第三权限级别。level 15是最高级别能进system-view、能改配置。如果你只想让实验者看display命令给level 1就够但日常实验在eNSP里没必要卡这么死给15省心。第四也是最容易踩的一个——service-type的版本差异。在不少版本的VRP上local-user xxx service-type后面的参数已经没有ssh和telnet了改成了terminal这一个选项。如果你敲service-type ssh报错说参数不存在别怀疑人生改成service-type terminal就行它涵盖的是所有VTY类型的登录。[AR1-aaa] local-user huawei service-type terminal这一步配漏了现象就是密码明明对登录时却一直认证失败而且报错信息非常含糊不会告诉你是因为service-type没配对。这一点我会在第四章再展开。3.3 VTY线路的authentication-mode与protocol inboundVTY是虚拟终端线路SSH登录本质上就是占用一条VTY。配置如下[AR1] user-interface vty 0 4 [AR1-ui-vty0-4] authentication-mode aaa [AR1-ui-vty0-4] protocol inbound ssh [AR1-ui-vty0-4] user privilege level 15 [AR1-ui-vty0-4] idle-timeout 10 0 [AR1-ui-vty0-4] quitauthentication-mode aaa的意思是登录认证走AAA模块也就是用你在aaa视图里建的local-user来验证。这是SSH场景下的标准做法别写成password模式那样用的是VTY自己的密码和你建的用户名密码是两套东西很容易搞混。protocol inbound ssh放行SSH协议。这里有个很实在的坑一旦配了这条telnet就登不进这台设备了。如果你正在排SSH问题结果发现telnet也连不上先想想是不是自己把telnet掐了。排查阶段可以先写成protocol inbound all等SSH验证通过了再收窄成只允许ssh这样不至于把自己锁在门外。user privilege level 15这条在AAA认证模式下其实不太起作用因为用户级别是从AAA的local-user带过来的。但写上没坏处有些场景下确实需要它作为兜底。真正决定你登进去是什么级别的是local-user xxx privilege level。idle-timeout 10 0是空闲超时10分钟。默认是5分钟做实验的时候经常是切出去看一眼文档回来会话就被踢了改长一点体验会好很多。改完VTY配置建议先别关当前会话另开一个客户端验证成功了再关这是远程管理的基本素养虽然eNSP里设备就在你面前但养成习惯没坏处。3.4 ssh user与客户端首次登录的信任确认还有一段经常被省略但有时候不配就不行的配置[AR1] ssh user huawei authentication-type password [AR1] ssh user huawei service-type stelnet在较新的VRP版本上只要AAA里建了用户、service-type对了这两条不配也能登录因为默认就是密码认证、stelnet服务。但在偏老一些的版本上必须显式配置这两条否则你会遇到密码正确但登录被拒的情况。所以我的建议是不管什么版本都把它写上多两行命令的事能消除一个变量。如果你想做免密登录就涉及公钥认证了[AR1] ssh user huawei authentication-type rsa [AR1] rsa peer-public-key clientkey [AR1-rsa-public-key] public-key-code begin [AR1-rsa-public-key-rsa-key-code] 粘贴客户端生成的公钥内容 [AR1-rsa-public-key-rsa-key-code] public-key-code end [AR1-rsa-public-key] peer-public-key end [AR1] ssh user huawei assign rsa-key clientkey这个流程在实验室里用得少但实际运维里很常见尤其是批量登录场景。公钥粘贴的时候要注意格式前后不能有多余空格每行不能超长eNSP的命令行粘贴长文本容易断行出错建议用设备的粘贴功能一次贴进去别一行行手敲。客户端这一侧如果你是用另一台路由器做客户端去stelnet命令是AR2 stelnet 10.1.1.1首次连接会提示服务器公钥将被信任并加入本地公钥列表需要你输入y确认。这一步如果直接回车跳过或者敲了别的字符连接会中断。很多人第一次用stelnet看到一堆英文提示就回车结果就是连接失败还以为是服务端的问题。用Xshell、PuTTY这类PC客户端时没有这个提示直接弹用户名密码框反而简单。4. 四类高频失败场景的逐条拆解4.1 连不上端口、地址、云设备映射这是最常见的一类特征是客户端直接提示连接超时、无法访问、connection refused连认证环节都到不了。排查顺序我固定这么走第一步从设备侧验证。在eNSP里再开一台设备ping一下服务端接口地址。通说明链路没问题不通就往回查接口状态、IP、路由、云设备绑定。第二步看服务端端口有没有在听[AR1] display tcp status输出里应该能看到22端口的监听项类似0.0.0.0:22这样的记录。如果看不到22端口说明SSH服务根本没起来回到第三章检查stelnet server enable和密钥。第三步如果你走的是本机PC加端口映射这条路检查三个点云设备的端口映射方向对不对入端口和出端口有没有搞反本机映射用的端口有没有被占用换一个高位端口试试比如2001改2022Windows保留端口范围有没有把你要用的端口圈进去。用下面这条命令查netsh int ipv4 show excludedportrange protocoltcp输出里会列出系统保留的端口区间如果你的映射端口落在里面映射永远不可能成功。解决办法是换个不在区间内的端口或者调整保留范围。这个坑特别隐蔽因为eNSP界面上看不出任何异常映射配置显示得好好的就是不通。第四步检查Windows防火墙。首次运行eNSP或Xshell时如果误点了阻止后面就一直是静默拦截表现也是连接超时。临时关掉防火墙试一次能通就说明是它干的。4.2 认证失败用户名密码权限三者联动这一类能连上但登录被拒报错通常是Authentication failed或者认证失败。核心原因就三个用户名不对、密码不对、用户没有对应服务的权限。用户名这条听起来很傻但真有人踩aaa里建的是huawei登录时敲成了Huawei华为设备注意一下大小写。密码同理粘贴的时候有没有带上多余空格eNSP的命令行有时候会自动补空格从文档里复制密码到客户端时要特别小心。密码对了还登不上重点查service-type。前面说过没配service-type的用户默认可能不允许任何服务登录。用下面这条命令确认[AR1] display aaa local-user输出里会列出每个用户的权限级别、服务类型、账号状态。重点看两处一是service-type里有没有包含你正在用的登录方式二是账号状态是active还是blocked。密码输错次数多了账号会被临时锁定这时候表现就是密码绝对正确但就是登不上要等一段时间或者手工解锁。还有一条容易忽略的如果VTY下配了protocol inbound ssh走的认证就是AAA如果配的是authentication-mode password那你用的是VTY密码和AAA用户没关系两套体系的密码混用必然有一个不对。提示认证类问题最有效的排查手段是打开调试debugging ssh server all然后在客户端发起一次登录看设备上实时打印到哪一步断了。调试信息会明确告诉你是在用户查找阶段失败、在密码校验阶段失败还是在服务类型检查阶段失败。4.3 协商失败算法不匹配怎么处理这类问题的特征很明显TCP能连上SSH握手阶段就断了客户端报错里往往带algorithm、key exchange、cipher、hmac这些词。原因就一个客户端和服务端没有共同的算法集合。造成代际差异的原因是VRP版本和客户端版本迭代不同步。老版本的PuTTY、老版SecureCRT默认只支持dh-group1-sha1这类老算法而较新的VRP可能默认禁用了弱算法反过来新版本的客户端禁用了老算法老版本VRP只支持老算法也是同样结果。处理思路有两个方向选一个就行方向一改客户端。以PuTTY为例在连接配置的SSH里把Kex、HostKey、Cipher、MAC这几栏调整成包含老算法或者换一个支持范围更宽的客户端。命令行方式连接时也可以显式指定比如用ssh命令加-o KexAlgorithms...参数。方向二改服务端。在VRP上显式配置算法集合[AR1] ssh server key-exchange dh_group_exchange_sha256 [AR1] ssh server cipher aes256_ctr [AR1] ssh server hmac sha2_256具体支持哪些参数跟版本有关敲ssh server key-exchange ?看一下设备支持哪些别照抄网上的。改完记得重新连一次验证。顺带说一句VS Code的Remote-SSH插件连设备时也常撞上这个问题原因一样都是算法协商处理思路完全一致只不过要在VS Code的SSH配置文件里加算法参数而已。4.4 服务端根本没起来几个自查命令这一类是配置写完了但服务就是没生效客户端连22端口直接被拒。常用的自查命令我列一下[AR1] display ssh server status [AR1] display ssh server session [AR1] display ssh user-information [AR1] display current-configuration | include ssh [AR1] display tcp statusdisplay ssh server status是关键正常输出里应该有STELNET server: Enabled、SSH server port: 22之类的信息。如果显示Disabled说明stelnet server enable没生效可能是没进system-view或者配置被覆盖了。display ssh server session看当前有没有在线会话排查是不是别人占满了VTY线路的时候有用。默认VTY 0 4是5条线路如果都占满了新的连接会被拒绝表现也是连不上。这种情况下可以调大VTY范围或者踢掉闲置会话。display current-configuration | include ssh能一眼看出所有和ssh相关的配置行快速确认有没有漏配。最后强调一次改完配置记得save。eNSP里设备重启后配置丢失是老生常谈你做实验重启一下虚拟设备配置全没了然后你对着空配置排查半天这种情况真的会发生。5. 常见问题速查表与压箱底经验5.1 故障现象对照速查表故障现象最可能的原因优先处置动作客户端连接超时无任何响应地址不通、端口映射失效、防火墙拦截ping验证连通性检查端口映射与保留端口范围Connection refusedSSH服务未启动、22端口未监听display ssh server status、display tcp statusAuthentication failed用户名密码错、service-type未配、账号被锁display aaa local-user核对服务类型与账号状态密码正确仍登录失败service-type版本差异、用户级别不足改用service-type terminal并显式配ssh user报算法不匹配相关错误客户端与服务端算法集合无交集调整客户端算法或服务端ssh server key-exchange等首次stelnet连接中断公钥信任提示未确认重新连接并在提示时输入y配置全在但重启后失效未执行save配置完成后执行save并确认这张表我建议你打印出来贴在显示器边上绝大部分SSH登录问题都能在上面找到对应行先定位类型再动手比上来就改配置高效得多。还要补一句很多看起来是SSH的问题本质是设备本身的状态问题。设备还没启动完成就去连SSH、设备资源不足导致接口掉线、主机上同时跑了太多虚拟设备导致网络栈异常这些都会伪装成SSH登录失败。所以排查的时候偶尔也要抬头看看整个环境而不是只盯着SSH那几行配置。5.2 抓包与debug取证的判断思路如果速查表上的方法都没解决就要上取证手段了。两个方向抓包和调试。抓包用eNSP自带的Wireshark右键设备接口选择开始抓包。过滤条件写tcp.port 22。正常的一次SSH连接你应该能看到TCP三次握手、协议版本交换、密钥交换、然后进入认证。如果连三次握手都不完整说明链路或者端口映射有问题如果握手完成但很快出现RST多半是算法协商失败或者服务端主动拒绝如果握手和协商都正常卡在认证阶段那就是账号问题。抓包最大的好处是能把网络问题和配置问题一刀切开。我见过太多人在配置上来回改其实网络包根本没到设备。调试用debugging ssh server all配合terminal monitor和terminal debugging让调试信息输出到当前终端。发起一次登录看设备侧的实时输出它会告诉你调度到哪一步、在哪一步返回失败。排查完记得undo debugging all关掉调试信息量大开着会影响设备性能。这两种手段一结合基本没有定位不了的问题剩下的只是你愿不愿意花时间看那些日志。5.3 我踩过的几个坑和私藏技巧第一个坑是密码复杂度。我早期一直用一个很简单的数字密码做实验配置阶段直接报密码太简单当时以为是命令写错了折腾半天才反应过来是密码校验。现在我的习惯是固定用一个符合复杂度要求的实验密码所有设备统一省得每次都想。第二个坑是service-type的参数名。有段时间我在新版本设备上敲service-type ssh一直报错翻文档才发现改成了terminal。这个经验告诉我VRP命令在不同版本之间是有差异的遇到不认识的报错第一反应应该是敲问号看当前版本的参数列表而不是怀疑自己手残。第三个坑是端口保留。有一次端口映射怎么配都不通换了好几个端口最后用netsh那条命令一查发现连续好几段端口都被系统保留了换到20000以上的端口立刻就通了。这个坑最坑的地方在于它和SSH本身毫无关系纯粹是Windows的行为。第四个技巧是关于VTY超时的。做SSH实验经常要来回切换窗口对照文档默认5分钟超时太短我习惯在服务端把idle-timeout调到30分钟以上做实验期间基本不会被踢。第五个技巧是配置留档。每跑通一个场景就把display current-configuration的完整输出存成文本文件命名带上日期和场景。下次遇到类似问题直接diff一下当前配置和能用的那份配置差异往往就是病灶所在。这个习惯是我做实验效率提升最大的一招比任何速查表都好用。最后一个提醒也是我认为最值得反复强调的eNSP毕竟是模拟器它的行为不总是和真机一致。有些配置在eNSP上能跑通换到真机上可能因为版本差异需要微调反过来也有。所以在eNSP上排通SSH之后建议把关键配置在真机或者更新的VRP版本上再验证一次别把模拟器上的结论当成金科玉律。我个人做完这一轮排查的体会是SSH登录失败这件事难点从来不在配置本身配置就那么几行背都背得下来。真正的难点在于快速判断问题属于哪一层然后用最小的代价验证它。把链路、服务、认证这三层拆清楚再配上速查表和抓包debug两个兜底手段eNSP里的SSH问题基本就没有能难住你的了。剩下那些稀奇古怪的报错多半能在设备的display输出和调试日志里找到线索耐心看下去就行。
返回列表