当我使用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
为什么?
答案 0 :(得分:6)
事实证明,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
权限。