paramiko - "Not a valid OpenSSH/RSA/... private key" 错误

paramiko - "Not a valid OpenSSH/RSA/... private key" error

当我使用 paramiko 2.4.0 时,我继续收到这样的错误:

SSHException: not a valid OPENSSH private key file

虽然我可以用钥匙ssh连接到机器,而且遥控器也可以用

密钥生成者:

ssh-keygen -t rsa

然后我把public密钥复制到远程机器:(路径也可以是私钥,是一样的)

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

为什么?

原来paramiko中检测按键错误的机制是……太简单了,有时很幼稚。如 #340 and #387 所示,存在一些已知问题。

最后发现不是key的问题;该消息令人困惑。是username/permission/duplication的问题。

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

想象一下这个场景:你用 Windows 生成一个密钥,你在这里 john,你的 public 密钥将在 authorized_keys 中有 john@myhost ] 文件。当您 connect() 没有 username 时,您实际上是在另一台 Linux 机器上使用 john 登录,而该机器可能没有此用户。如果你在 Linux 上更好,因为如果你用 root 生成密钥,在另一台机器上它也有 root,并且 root 可能有public 密钥文件的正确权限。

所以,最后,我能够通过以下方式解决问题:

  • 在远程机器上,检查 authorized_keys 文件以消除相同 user@host.
  • 的任何重复行
  • 生成 public 密钥后,更改它,使其中的 user 成为 远程 机器上的有效用户。是的,这看起来很奇怪,但这就是 paramiko 的工作原理。然后复制到远程。
  • 调用 connect() 时,传入的 username 参数与您在 public 键中输入的用户名相同。
  • 确保您在 public 密钥中使用的用户对 authorized_keys 文件及其父 .ssh 文件夹具有正确的权限。至少 r 权限。