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