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

如何在Paramiko中无需指定类型读取任意SSH私钥?

解决Paramiko读取任意类型SSH私钥的问题

最优方案:使用Paramiko父类方法自动识别密钥类型

Paramiko的PKey类(所有密钥类型的父类)提供了from_private_key_file()工厂方法,无需指定具体密钥类型(如Ed25519Key或RSAKey),就能自动读取并解析任意支持的SSH私钥类型(包括RSA、Ed25519、ECDSA等)。

替换你原来的代码为:

import os
import paramiko

keyfilename = build_configuration['sshPrivateKeypath']
keyfilename = os.path.expandvars(keyfilename)
# 自动识别密钥类型
key = paramiko.PKey.from_private_key_file(keyfilename)

ssh.connect(ssh_host, port=port, username=ssh_user, pkey=key)

如果你的私钥是加密的(带密码),只需添加password参数:

key = paramiko.PKey.from_private_key_file(keyfilename, password="your_key_password")

额外说明

  • 你之前遇到的SSHException是因为使用了特定密钥类型的子类方法(如Ed25519Key.from_private_key_file()),这类方法只能处理对应类型的密钥,无法兼容其他类型。
  • 若你需要提前判断密钥类型,可读取私钥文件的开头标识:
    • RSA私钥通常以-----BEGIN RSA PRIVATE KEY-----或-----BEGIN OPENSSH PRIVATE KEY-----开头
    • Ed25519私钥一般以-----BEGIN OPENSSH PRIVATE KEY-----开头(OpenSSH格式)
      不过这种方式不如直接使用父类方法可靠,因为不同格式的密钥可能有相同的开头标识,而父类方法会通过内部解析准确识别类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:22:33