3

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

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

...其中 ssh 是一个 SSHClient 对象。最终我的谷歌搜索让我相信 connect 真的需要一个私钥,而不是公开的,所以我在这里尝试了解决方案。与此不同的是,它使用 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 一无所知,但谷歌似乎认为它们是相同的东西,或者至少是兼容的。

这里有很多类似问题的答案,但没有任何迹象表明我的解决方案不起作用。我没有阅读一些奇怪的格式,我没有将密钥文件与密钥本身混淆,等等。

任何人都成功使用 id_rsa.pub 或 Paramiko 的等价物?最好在 *nix 上。我也乐于接受,“嘿,白痴!你为什么要使用 Paramiko !” ...只要批评是建设性的。

4

1 回答 1

3

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

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

于 2012-10-24T21:42:04.577 回答