Python:通过公钥 "not a valid RSA"进行 Paramiko 身份验证

标签 python rsa solaris paramiko public-key

我正在尝试通过 Paramiko 在两个 Solaris 服务器之间进行通信。出于安全原因,我不能使用我的私钥,所以我尝试使用 id_rsa.pub。最初我试过这个:

ssh.connect(hostname=host, username=user, key_filename=path-to-key)

...其中 ssh 是 SSHClient 对象。最终我的谷歌搜索让我相信 connect 确实需要私钥,而不是公钥,所以我尝试了解决方案 here .与此不同的是,它使用 transport.auth_publickey 进行身份验证,我希望这能帮助我解决任何格式化问题。这是重要的部分:

try:
    ki = paramiko.RSAKey.from_private_key_file(filename=key_file)
except Exception, e:
    print 'Failed loading {0}.  {1}'.format(key_file, e)
    return

我检查了我的 key_file,它肯定指向我的 id_rsa.pub 文件,它是 OpenSSH 格式(我认为;它以 ssh-rsa 开头,以 user@host 结尾)。不过,我始终遇到上面的异常,e 是“不是有效的 RSA 私钥文件”。查看代码,我发现与此最接近的错误是在 BER 的解码步骤中。我对 BER 或 OpenSSH 一无所知,但谷歌似乎认为它们是同一回事,或者至少是兼容的。

这里有很多类似问题的答案,但没有任何内容表明我的解决方案不起作用的原因。我没有阅读一些奇怪的格式,我没有混淆 key 文件和 key 本身,等等。

有人成功使用 id_rsa.pub 或 Paramiko 的等效文件吗?最好在 *nix 上。我也很乐意,“嘿,白痴!当有更简单的东西时,你为什么要使用 Paramiko!” ...只要批评是建设性的。

最佳答案

连接服务器时不能使用公钥,必须提供私钥,这就是公钥/私钥认证的原理!您链接到的示例还读取私钥并使用它进行连接。

您可以生成一个仅用于 paramiko 的 key 对,这样您就不需要公开您使用的私钥,例如ssh 等

关于Python:通过公钥 "not a valid RSA"进行 Paramiko 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057948/

相关文章:

java - 无法使用配置的公钥验证 RSA 签名。签名长度不正确: got 255 but was expecting 256

java - ECB 模式下的 RSA 加密

ios - 使用 ccrypto RSA 加密 2500 字节数据

用于监视进程和发送邮件(如果失败)的 Bash 脚本

shell - 解析 zpool 中的磁盘

python - 如何使用类似 R 的公式在 Python 中运行 GLM Gamma 回归

python - 查询集对象不可调用 Django

python - pandas to_csv 然后 read_csv 结果到 numpy.datetime64 由于 utc 而困惑

python - 如何使用 Python 创建 JSON 对象的嵌套数组?

linux - 解压 RPM 文件并重新打包