• 全部
  • 经验案例
  • 典型配置
  • 技术公告
  • FAQ
  • 漏洞说明
  • 全部
  • 全部
  • 大数据引擎
  • 知了引擎
产品线
搜索
取消
案例类型
发布者
是否解决
是否官方
时间
搜索引擎
匹配模式
高级搜索

交换机,关于双因子(密码+密钥)认证

3天前提问
  • 0关注
  • 0收藏,100浏览
粉丝:0人 关注:0人

问题描述:

各位大佬好,请教下交换机双因子认证是不是有Bug?目前测试单纯密码或密钥是可以ssh认证登录的,状况是python通过SSH连接,SFTP下载交换机的配置文件到本地,以下为交换机的版本信息

H3C Comware Software, Version 7.1.070, Release 6343P08

Copyright (c) 2004-2022 New H3C Technologies Co., Ltd. All rights reserved.

H3C S5048PV3-EI uptime is 0 weeks, 3 days, 17 hours, 44 minutes

Last reboot reason : User reboot

 

Boot image: flash:/s5000v3_ei-cmw710-boot-r6343p08.bin

Boot image version: 7.1.070, Release 6343P08

  Compiled Sep 21 2022 11:00:00

System image: flash:/s5000v3_ei-cmw710-system-r6343p08.bin

System image version: 7.1.070, Release 6343P08

  Compiled Sep 21 2022 11:00:00

 

 

Slot 1:

Uptime is 0 weeks,3 days,17 hours,44 minutes

S5048PV3-EI with 1 Processor

BOARD TYPE:         S5048PV3-EI

DRAM:               512M bytes

FLASH:              256M bytes

PCB 1 Version:      VER.A

Bootrom Version:    146

CPLD 1 Version:     001

Release Version:    H3C S5048PV3-EI-6343P08

Patch Version  :    None

Reboot Cause  :     UserReboot

[SubSlot 0] 48GE+4SFP

 

4 个回答
粉丝:13人 关注:9人

排查步骤:
1. 确认双因子认证配置是否正确:
检查SSH用户是否同时配置了密码和密钥:display ssh user-information
确认认证方式是否为双因子(password-publickey):display ssh server configuration
2. 测试本地双因子登录:使用SSH客户端(如PuTTY)尝试双因子登录,验证是否需要同时输入密码和密钥。
3. 检查Python SSH库的认证方式:确认Python代码是否同时提供了密码和密钥,部分库默认仅使用一种认证方式。
4. 查看交换机日志:display logbuffer 检查认证失败原因,是否有双因子认证相关错误。
5. 升级版本:当前版本为7.1.070 Release 6343P08,可尝试升级到最新稳定版本(如7.1.070 Release 6343P10),排除已知Bug。
关键配置命令:
配置SSH用户双因子认证:

ssh user linfoson service-type all authentication-type password-publickey
ssh user linfoson publickey ...(导入公钥)
local-user linfoson password simple xxxxxx

启用SSH双因子认证:

ssh server authentication-type password-publickey

若本地测试双因子正常但Python连接异常,需检查Python代码的认证逻辑,确保同时传递密码和密钥。

暂无评论

粉丝:162人 关注:11人

升级下最新版本试试 

暂无评论

粉丝:27人 关注:1人

基于你的描述和软件版本,这很可能是一个已知问题或配置细节未妥善处理,而非设备本身的Bug。

我整理了一份排查清单,你可以对照着逐步检查,大概率能定位到原因。

🐞 可能的原因分析

  1. 软件版本已知问题:你当前使用的 Release 6343P08 版本,在H3C的知了社区中,已有用户反馈过类似的双因子认证(密码+公钥)在SFTP场景下存在问题。这是需要优先考虑的。

  2. Python库认证逻辑问题paramiko 等库在实现双因子认证时,对“同时提供密码和公钥”的处理方式可能不符合交换机的预期。有时库可能默认只使用一种认证方式。

  3. 交换机配置不完整:可能遗漏了关键步骤,例如没有正确地将公钥与SSH用户关联,或认证类型未设置为 password-publickey

  4. 客户端/服务端SSH版本或算法协商失败:尽管单独认证能成功,但双因子认证可能触发了不同的协商流程,如果算法(如密钥交换算法、加密算法)不匹配,也可能导致连接失败。

🔧 排查与解决步骤

建议按照以下顺序操作:

1. 升级软件版本(首要推荐)

这是解决已知问题最直接的方法。

  • 操作:访问H3C官网,将交换机软件升级到 Release 6343P10 或更新的稳定版本

  • 目的:排除因版本Bug导致的认证异常。

2. 检查并确认交换机配置

请登录交换机,逐一核对以下关键配置。

  • 确认SSH用户认证方式:执行 display ssh user-information,确保相应用户的 Authentication-type 字段显示为 password-publickey

  • 确认公钥已正确导入并关联

    • 执行 display public-key peer [ brief ],确认你的公钥已存在于设备上。

    • 检查SSH用户配置,确认已通过 assign publickey 命令正确关联了该公钥

  • 确认本地用户存在且密码正确:执行 display local-user,确保对应的本地用户已创建且密码无误

3. 使用SSH客户端进行对比测试

用标准的SSH客户端(如 PuTTY 或 SecureCRT)进行一次手动双因子登录测试

  • 目的:确认在手动输入密码和加载私钥的情况下,能否成功登录。

  • 结果判断

    • 如果手动登录也失败:问题基本在交换机侧的配置或版本上。

    • 如果手动登录成功:问题几乎可以肯定是出在你的Python脚本逻辑上。

4. 审查Python脚本(paramiko

如果手动测试成功,就需要检查你的Python代码

  • 确认同时传递了密码和私钥:在 paramiko 的 connect() 方法中,需要同时指定 password 和 pkey 参数

    python
    # 正确的双因子认证调用示例 private_key = paramiko.RSAKey.from_private_key_file('/path/to/private_key') ssh.connect(hostname=ip, username=username, password=password, pkey=private_key)
  • 检查私钥格式:确保 paramiko 能正确解析你的私钥文件(通常是PEM格式)。如果私钥有密码保护,需要在 from_private_key_file() 方法中提供 password 参数。

5. 查看交换机日志

登录交换机,执行 display logbuffer 命令,查看是否有SSH认证失败的具体错误信息。这些日志能提供最直接的线索。

暂无评论

粉丝:25人 关注:2人

并不是交换机存在 Bug,99% 是配置错误 + Python SSH 库调用逻辑不满足「双因子同时校验」要求
你的设备版本 R6343P08 本身完整支持 password-publickey 双因子(密码 + 密钥全部校验通过才放行),不存在官方已知漏洞。
你当前现象:单用密码、单用密钥都能登录,说明现在认证模式是 all(或 default 兼容模式,二选一即可放行),并未开启强制双因子。
一、先搞懂 Comware V7 SSH 4 种认证模式(根源)
plaintext
1. password:仅密码登录
2. publickey:仅密钥免密登录
3. password-publickey【真正双因子】:SSH2客户端必须**密钥校验成功 + 密码校验成功,两个全都通过才能登录**
4. all(你现在大概率是这个):密钥/密码任意一个通过就能登录,这就是你「单用密码、单用密钥均可连上」的根本原因
官方手册明确:password-publickey 才是严格双因素认证,二选一放行 = 配置错误。
二、交换机标准正确双因子完整配置(覆盖 SSH+SFTP)
1、前置基础(确保已做)
shell
system-view
# 生成服务器主机密钥(必须)
public-key local create rsa
ssh server enable
ssh server version 2 # 强制仅SSH2,杜绝SSH1降级漏洞

# VTY线路认证模式
user-interface vty 0 15
authentication-mode scheme
protocol inbound ssh
quit
2、给目标 SSH 用户开启【强制双因子】(关键修正命令)
shell
# 1.本地用户配置密码、权限、服务类型
local-user admin class manage
password cipher Admin@123456
service-type ssh sftp
authorization-attribute user-role network-admin
quit

# 2.导入客户端公钥(把你的本地公钥上传交换机导入)
public-key peer ClientKey import sshkey flash:/id_rsa.pub

# 3.绑定公钥给SSH用户 + 强制双因子认证 password-publickey
ssh user admin publickey ClientKey
ssh user admin service-type ssh sftp
# 重点:双因子认证模式,必须写 password-publickey
ssh user admin authentication-type password-publickey
3、全局 SSH 服务器兜底模式(可选加固)
shell
# 全局默认双因子,防止新建用户逃逸策略
ssh authentication-type default password-publickey
4、校验配置是否生效
shell
# 查看用户SSH认证模式,必须显示 authentication-type: password-publickey
display ssh user-information admin

# 查看SSH全局配置
display ssh server configuration
配置完成后:
只带密钥不带密码 → 认证失败
只输密码不带密钥 → 认证失败
必须密钥验证通过 + 再输入正确密码,才能建立 SSH/SFTP 连接。
三、Python 脚本 SFTP 仍然能单方式登录的 2 个核心原因
原因 1:Python Paramiko/Netmiko 默认只会执行单阶段认证
绝大多数 SSH 库逻辑:
优先尝试密钥认证,如果密钥成功,直接完成登录,不会再触发二次密码校验;
只有密钥失败时,才会弹窗 / 传入密码做二次认证。
交换机双因子要求:密钥校验成功之后,仍然强制弹出密码输入环节,但 Paramiko 默认流程走完密钥成功就结束流程,不会主动提交密码,导致出现两种诡异表现:
脚本传了私钥 + 密码:密钥过了就直接登录,跳过密码校验;
只传密码:走密码认证也能登录。
解决 Python 适配双因子 SSH 写法(Paramiko 示例)
必须开启「密钥成功后再次交互式提交密码」,标准双因子调用模板:
python
运行
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
private_key = paramiko.RSAKey.from_private_key_file(r"C:\ssh_key\id_rsa")

# 关键:允许密钥认证后继续进行密码交互式认证
ssh.connect(
hostname='交换机IP',
username='admin',
password='Admin@123456',
pkey=private_key,
look_for_keys=False,
allow_agent=False
)
# 后续建立sftp会话
sftp = ssh.open_sftp()
如果使用 Netmiko,需要额外添加 auth_timeout 并开启 banner_timeout 适配二次密码弹窗。
原因 2:交换机存在两条配置叠加冲突
用户 SSH 认证模式是 password-publickey
全局配置了 ssh authentication-type default all
全局 default 配置会覆盖用户策略,依然允许二选一登录。
排查命令:
shell
display current-configuration | include ssh authentication-type default
如果存在 ssh authentication-type default all,删除该配置即可:
shell
undo ssh authentication-type default
四、是否存在版本 Bug?
R6343P08 无 password-publickey 认证失效的官方 BUG 公告;
仅极早期 R6305 版本存在双因子绕过漏洞,你的版本不受影响;
稳妥方案:升级至 S5048PV3-EI 最终正式版本 R6343P10,补齐全部 SSH 安全补丁。
五、分步排错落地流程
Console 登录交换机,执行 ssh user admin authentication-type password-publickey 严格绑定双因子模式;
删除全局 ssh authentication-type default all 兜底兼容配置;
使用 Xshell、SecureCRT 手动测试:
仅导入私钥登录:会在密钥校验通过后,强制弹出密码输入框,不输密码拒绝登录;
只输密码不提供私钥:直接认证拒绝;
手动验证正常 = 交换机配置无误。
修改 Python 代码,同时传入私钥 + 密码,适配双阶段认证流程。
复测 SFTP 下载配置,此时无法只用密钥 / 只用密码绕过认证。
六、额外加固补充(防止逃逸双因子)
shell
# 禁止SSH键盘交互式绕过
undo ssh server keyboard-interactive authentication enable
# 限制SSH来源IP,仅运维服务器允许连接
acl number 3000
permit source 运维服务器IP 0
ssh server acl 3000
七、总结
不是交换机 Bug,是认证模式配成了all(二选一放行),没有启用真正的password-publickey双因子;
Python SSH 库默认逻辑在密钥认证成功后不会再提交密码,看上去像是 “绕过了密码校验”;
修正 SSH 用户认证模式 + 修改 Python 代码同时传入密钥和密码,即可实现严格「密钥 + 密码双重校验」。

暂无评论

编辑答案

你正在编辑答案

如果你要对问题或其他回答进行点评或询问,请使用评论功能。

分享扩散:

提出建议

    +

亲~登录后才可以操作哦!

确定

亲~检测到您登陆的账号未在http://hclhub.h3c.com进行注册

注册后可访问此模块

跳转hclhub

你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作

举报

×

侵犯我的权益 >
对根叔社区有害的内容 >
辱骂、歧视、挑衅等(不友善)

侵犯我的权益

×

泄露了我的隐私 >
侵犯了我企业的权益 >
抄袭了我的内容 >
诽谤我 >
辱骂、歧视、挑衅等(不友善)
骚扰我

泄露了我的隐私

×

您好,当您发现根叔知了上有泄漏您隐私的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您认为哪些内容泄露了您的隐私?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)

侵犯了我企业的权益

×

您好,当您发现根叔知了上有关于您企业的造谣与诽谤、商业侵权等内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到 pub.zhiliao@h3c.com 邮箱,我们会在审核后尽快给您答复。
  • 1. 您举报的内容是什么?(请在邮件中列出您举报的内容和链接地址)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
  • 3. 是哪家企业?(营业执照,单位登记证明等证件)
  • 4. 您与该企业的关系是?(您是企业法人或被授权人,需提供企业委托授权书)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

抄袭了我的内容

×

原文链接或出处

诽谤我

×

您好,当您发现根叔知了上有诽谤您的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您举报的内容以及侵犯了您什么权益?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

对根叔社区有害的内容

×

垃圾广告信息
色情、暴力、血腥等违反法律法规的内容
政治敏感
不规范转载 >
辱骂、歧视、挑衅等(不友善)
骚扰我
诱导投票

不规范转载

×

举报说明