You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Paramiko SSH连接认证失败求助:Putty/OpenSSH可正常连接

解决Paramiko与Dropbear 2017.75的SSH认证兼容性问题

核心排查与修复方案

Dropbear 2017.75的SSH协议实现细节和OpenSSH/Putty存在差异,Paramiko默认配置未适配这些差异,以下是针对性的解决步骤:

1. 强制指定Dropbear兼容的密钥交换算法

Dropbear 2017.75对现代椭圆曲线密钥交换算法支持有限,需手动指定它兼容的传统DH算法:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
    hostname="你的服务器IP",
    username="你的用户名",
    password="你的密码",
    kex="diffie-hellman-group1-sha1,diffie-hellman-group14-sha1"
)

2. 匹配Dropbear的加密套件

Dropbear默认启用的加密套件和Paramiko默认集不完全重合,手动指定兼容的加密算法:

ssh.connect(
    # 保留其他连接参数
    cipher="aes128-cbc,3des-cbc,aes256-cbc"
)

3. 处理特殊字符的账号凭证

如果用户名/密码包含@、$等特殊字符,Paramiko的字符串处理逻辑可能和Putty/OpenSSH不同,尝试用getpass模块输入密码避免转义问题:

import getpass

password = getpass.getpass("输入密码: ")
ssh.connect("你的服务器IP", "你的用户名", password)

4. 开启调试日志定位具体失败点

通过Paramiko的调试日志,查看认证过程中协议交互的细节:

import logging
logging.basicConfig(level=logging.DEBUG)

# 执行connect操作后,重点关注"Authentication failed"之前的密钥交换、加密协商日志

5. 手动加载Dropbear主机密钥

部分场景下,Paramiko自动添加主机密钥的逻辑无法识别Dropbear生成的密钥格式,可手动加载:

from paramiko.hostkeys import HostKeys
from paramiko import RSAKey

hk = HostKeys()
# 替换为服务器的公钥内容
hk.add("你的服务器IP", "ssh-rsa", RSAKey(data=b"服务器公钥字符串"))
ssh.get_host_keys().update(hk)
ssh.connect("你的服务器IP", "你的用户名", "你的密码")

关键差异说明

  • Dropbear 2017.75不支持Paramiko默认的ecdh-sha2-nistp256等椭圆曲线密钥交换算法,必须强制指定传统DH算法
  • 部分环境中,Dropbear的主机密钥格式无法被Paramiko的AutoAddPolicy正确解析,手动加载可解决该问题

内容的提问来源于stack exchange,提问作者Alberto Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:17:04