如何从Jenkins全局「SSH Username with private key」凭证提取paramiko可用私钥
Jenkins SSH凭证适配paramiko私钥格式解决方案
错误根因
paramiko.RSAKey.from_private_key() 方法要求传入支持readlines方法的类文件对象,你直接从环境变量读取到的myKey为字符串类型,不符合参数要求,因此抛出属性报错。
前置配置校验
首先确认非流水线作业的凭证注入配置正确:
- 在作业配置页的「构建环境」板块勾选 Use secret text(s) or file(s)
- 新增 SSH User Private Key 类型绑定,变量名填
myKey,选择你提前创建的同名SSH Username with private key类型凭证即可
完成配置后Jenkins会自动将完整私钥内容以带换行符的字符串形式注入到对应环境变量中。
代码修改方案
推荐使用io.StringIO将字符串私钥包装为类文件对象,无需生成临时本地文件:
import os import io import paramiko # 从环境变量读取私钥字符串 jenkins_private_key = os.environ['myKey'] # 处理可能的转义换行符(可选,仅当注入的私钥中\n被转义为\\n时使用) # jenkins_private_key = jenkins_private_key.replace('\\n', '\n') # 包装为类文件对象 key_file_obj = io.StringIO(jenkins_private_key) # 传入paramiko生成可用密钥对象 private_key = paramiko.RSAKey.from_private_key(key_file_obj)
如果你的私钥设置了加密密码,传入password参数即可:
private_key = paramiko.RSAKey.from_private_key(key_file_obj, password="你的私钥解密密码")
内容的提问来源于stack exchange,提问作者Leandro Pérez
相关产品推荐
相关产品推荐

