Paramiko PKey.from_private_key_file дает мне "__init __ () получил неожиданный аргумент ключевого слова 'имя файла'" - PullRequest
1 голос
/ 23 апреля 2020

Я получаю очень странное поведение от paramiko:

bla=paramiko.pkey.PKey(msg=None,data=None).from_private_key_file()

TypeError                                 Traceback (most recent call last)
<ipython-input-32-13288f655ecf> in <module>
----> 1 paramiko.pkey.PKey(msg=None,data=None).from_private_key_file()

TypeError: from_private_key_file() missing 1 required positional argument: 'filename'

здесь мне говорят, что мне нужно имя файла, но потом, когда я пытаюсь что-то указать:

bla=paramiko.pkey.PKey(msg=None,data=None).from_private_key_file('key')

                                 Traceback (most recent call last)
<ipython-input-33-5fa0cf9b6317> in <module>
----> 1 bla=paramiko.pkey.PKey(msg=None,data=None).from_private_key_file('key')

~/anaconda3/lib/python3.7/site-packages/paramiko/pkey.py in from_private_key_file(cls, filename, password)
    233         :raises: `.SSHException` -- if the key file is invalid
    234         """
--> 235         key = cls(filename=filename, password=password)
    236         return key
    237 

TypeError: __init__() got an unexpected keyword argument 'filename'

Может кто-нибудь объяснить для меня что происходит? Я полностью сбит с толку.

1 Ответ

1 голос
/ 23 апреля 2020
  1. PKey.from_private_key_file - это метод класса.
  2. Не используйте PKey базовый класс напрямую. Вы должны использовать правильный класс-потомок, такой как RSAKey, DSSKey, et c.

В качестве документации говорит:

Через магию c из Python этот фабричный метод будет существовать во всех подклассах PKey (таких как RSAKey или DSSKey ), но бесполезно для абстрактного класса PKey.

Правильный код выглядит так:

key = paramiko.RSAKey.from_private_key_file('key')

Хотя, если вы собираетесь использовать ключ с помощью SSHClient вы можете передать имя файла напрямую в key_filename аргумент SSHClient.connect, и вам вообще не придется заниматься загрузкой ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...