当我使用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/