当我使用时paramiko 2.4.0,我继续收到这样的错误:
SSHException: not a valid OPENSSH private key file
Run Code Online (Sandbox Code Playgroud)
虽然我可以使用钥匙到ssh机器,并且可以访问遥控器.
密钥由以下方式生成:
ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)
然后我将公钥复制到远程机器:(路径也可以是私钥,它是一样的)
ssh-copy-id -i /path/to/public/key root@remote_host
Run Code Online (Sandbox Code Playgroud)
为什么?
事实证明,在检测关键错误的机制paramiko是... 太简单,有时天真.如#340和#387所示,存在一些已知问题.
最后证明它不是钥匙的问题; 消息令人困惑.用户名/权限/复制的问题.
paramiko将尝试使用您在密钥中使用的用户登录,因为它假定用户也存在于远程计算机上.但我认为这种逻辑是错误的,因为基本上当你使用加密登录时,你不需要用户名; 你有私钥,服务器有公钥,这就是它所需要的.
想象一下这种情况:你用Windows生成一个密钥,而你在john这里,你的公钥将john@myhost在authorized_keys文件中.当你connect()没有时username,你实际上是john在另一台可能没有这个用户的Linux机器上登录.如果你在Linux上,那就更好了,因为如果你生成密钥root,在另一台机器上也有root,并且root可能对公钥文件拥有正确的权限.
所以,最后,我能够通过以下方式解决问题:
authorized_keys文件以消除任何重复的行user@host.user使其成为远程计算机上的有效用户.是的,这似乎很奇怪,但它是如何paramiko工作的.然后将其复制到远程.connect(),将usernamearg 传入与您放入公钥的用户名相同.authorized_keys文件及其父.ssh文件夹具有权限.至少r许可.| 归档时间: |
|
| 查看次数: |
3084 次 |
| 最近记录: |