paramiko - "不是有效的OpenSSH / RSA / ...私钥"错误

时间:2018-03-27 11:02:56

标签: paramiko ssh-keys

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

为什么?

1 个答案:

答案 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权限。