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

使用Paramiko连接主机失败:提示不是有效的OPENSSH私钥文件

解决Paramiko无法识别PPK私钥的问题

问题根源:你用的private.ppk是WinSCP/PuTTY专用的私钥格式,Paramiko只支持OpenSSH标准格式的私钥,所以会报「not a valid OPENSSH private key file」错误。

以下是具体解决方法:

方法一:用WinSCP转换私钥格式

  • 打开WinSCP,顶部菜单栏选择「工具」→「PuTTYgen」
  • 在弹出的PuTTYgen窗口中,点击「加载」,找到并选中你的private.ppk文件(注意文件类型要选「All Files」才能看到ppk)
  • 加载成功后,点击「转换」→「导出OpenSSH密钥」,弹出提示时选择「是」(如果不需要密钥密码),将文件保存为private_openssh.key之类的名称
  • 修改脚本中的key_filename参数,指向这个新生成的OpenSSH格式密钥文件

方法二:单独用PuTTYgen转换

  • 如果你已经安装了PuTTY工具包,直接打开PuTTYgen
  • 点击「加载」导入private.ppk,再按上述步骤导出OpenSSH格式密钥即可

额外注意事项

  • 在Linux/macOS环境下,新生成的密钥文件权限必须设置为600,否则会被SSH服务拒绝:
    chmod 600 private_openssh.key
    
  • 如果你的私钥设置了密码,不能直接用key_filename参数,需要先加载密钥并传入密码,示例代码如下:
    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 加载带密码的私钥
    private_key = paramiko.RSAKey.from_private_key_file('private_openssh.key', password='你的密钥密码')
    ssh.connect('hostname.com', username='user', pkey=private_key)
    
    stdin, stdout, stderr = ssh.exec_command('ls')
    print(stdout.readlines())
    ssh.close()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:27:04