Python:通过公钥“不是有效的RSA”进行Paramiko认证

时间:2012-10-24 21:21:25

标签: python rsa solaris paramiko public-key

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

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

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

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

任何人都可以成功使用id_rsa.pub或与Paramiko等效的人?最好是* nix。我也很开心,“嘿,白痴!当你有更容易的事情时,你为什么要使用Paramiko!” ......只要批评是建设性的。

1 个答案:

答案 0 :(得分:3)

连接服务器时无法使用公钥,您必须提供私钥,这就是公钥/私钥验证的工作方式!您链接到的示例还会读取私钥并使用它进行连接。

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