SSHTunnelForwarder与DBeaver使用SSH公钥认证失败问题咨询
解决方案
根因说明
该问题是由你使用的paramiko版本、DBeaver内置的SSH客户端库不支持macOS默认生成的RSA密钥采用的rsa-sha2-256/rsa-sha2-512签名算法导致的,系统终端SSH客户端兼容新旧算法所以可以正常登录,和密钥是否为PEM格式无关。
1. Python SSHTunnelForwarder 修复方案
方案一:升级paramiko到最新版本
2.9及以上版本的paramiko已经默认支持rsa-sha2系列算法,直接执行升级命令即可:
pip install --upgrade paramiko
升级完成后原有代码仅需补全缺失的本地端口配置即可正常运行。
方案二:手动指定兼容的签名算法(适配旧版本paramiko)
如果不方便升级依赖,可以在创建SSHTunnelForwarder时显式指定允许的公钥算法:
import paramiko from sshtunnel import SSHTunnelForwarder from mysql.connector import connect # 手动添加rsa-sha2系列算法到支持列表 paramiko.Transport._preferred_pubkeys = ( 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ssh-ed25519' ) mypkey = paramiko.RSAKey.from_private_key_file('/Users/some_user/.ssh/id_rsa') with SSHTunnelForwarder( ("host", 22), ssh_username="some_user", ssh_pkey=mypkey, remote_bind_address=("localhost", 3306) ) as server: with connect( host="127.0.0.1", port=server.local_bind_port, # 你原有代码漏了这行配置,会导致数据库默认连接本地3306端口而非SSH隧道转发的端口,也会引发连接异常 user="some_user", password='some_password' ) as connection: print(connection)
2. DBeaver 修复方案
- 打开DBeaver的连接编辑页面,切换到「SSH」标签页
- 点击「高级设置」,在公钥算法列表中勾选
rsa-sha2-256和rsa-sha2-512 - 保存配置后重新连接即可
可选:生成兼容旧客户端的RSA密钥
如果你需要生成全兼容的密钥,可以执行以下命令重新生成:
ssh-keygen -t rsa -b 4096 -m PEM -o "PubkeyAcceptedKeyTypes=+ssh-rsa"
生成后将新的公钥上传到服务器~/.ssh/authorized_keys文件中即可。
内容的提问来源于stack exchange,提问作者seve
相关产品推荐
相关产品推荐

