我正在尝试通过 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 !” ...只要批评是建设性的。