当我使用paramiko 2.4.0时,我继续收到如下错误:

SSHException: not a valid OPENSSH private key file


虽然我可以使用密钥ssh连接到机器,但可以访问遥控器。

密钥是通过以下方式生成的:

ssh-keygen -t rsa


然后我将公钥复制到远程计算机:(路径也可以是私钥,这是相同的)

ssh-copy-id -i /path/to/public/key root@remote_host


为什么?

最佳答案

事实证明,检测paramiko中关键错误的机制太简单了,有时还很幼稚。如#340#387所示,存在一些已知问题。

最后,事实证明这不是钥匙的问题。该消息令人困惑。这是用户名/权限/重复的问题。

paramiko将尝试使用您在密钥中使用的用户登录,因为它假定该用户也存在于远程计算机上。但是我认为这种逻辑是错误的,因为基本上,当您使用密码登录时,您不需要用户名;您拥有私钥,服务器拥有公钥,这就是它所需要的。

想象一下这种情况:您使用Windows生成了一个密钥,并且您在这里john,您的公共密钥在john@myhost文件中将具有authorized_keys。当您不使用connect()的情况下使用username时,实际上是在另一台Linux计算机上以john登录,该计算机可能没有该用户。如果您使用的是Linux,则更好,因为如果使用root生成密钥,则在另一台计算机上它也具有root,并且root可能具有对公钥文件的正确权限。

因此,终于,我能够通过以下方式解决问题:


在远程计算机上,检查authorized_keys文件以消除同一user@host的所有重复行。
生成公钥后,对其进行更改,以使其中的user是远程计算机上的有效用户。是的,这似乎很奇怪,但这是paramiko的工作方式。然后将其复制到远程。
调用connect()时,将username arg传递为您在公用密钥中输入的用户名。
确保您在公用密钥中使用的用户对authorized_keys文件及其父.ssh文件夹具有正确的权限。至少具有r权限。

关于paramiko - paramiko-“无效的OpenSSH/RSA/…私钥”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49511209/

10-13 09:40