paramiko
установлен из исходных кодов, загруженных с официального репозитория.
При выполнении подключения – возникает ошибка:
NameError: global name ‘descriptor’ is not defined
Например:
>>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) >>> ssh.connect('54.***.***.110', username='username', key_filename='D:KeysMyOWNsetevoy_priv.ppk') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "buildbdist.win32eggparamikoclient.py", line 366, in connect File "buildbdist.win32eggparamikoclient.py", line 515, in _auth File "buildbdist.win32eggparamikoagent.py", line 343, in __init__ File "buildbdist.win32eggparamikoagent.py", line 66, in _connect File "buildbdist.win32eggparamikoagent.py", line 83, in _send_message File "buildbdist.win32eggparamikowin_pageant.py", line 123, in send File "buildbdist.win32eggparamikowin_pageant.py", line 89, in _query_pageant File "buildbdist.win32eggparamiko_winapi.py", line 273, in get_security_attributes_for_user File "buildbdist.win32eggparamiko_winapi.py", line 223, in descriptor NameError: global name 'descriptor' is not defined
Для решения – отредактируйте файл paramiko-masterbuildlibparamiko_winapi.py
из загруженной копии, и в строках 222 и 223 замените:
@descriptor.setter def descriptor(self, value): self._descriptor = descriptor self.lpSecurityDescriptor = ctypes.addressof(descriptor)
На:
@descriptor.setter def descriptor(self, value): self._descriptor = value self.lpSecurityDescriptor = ctypes.addressof(value)
Удалите egg
-файл:
> rm C:Python27Libsite-packagesparamiko-1.16.0-py2.7.egg
Переустановите paramiko
:
C:[...]paramiko-master>easy_install ./ Processing Writing C:[...]paramiko-mastersetup.cfg Running setup.py -q bdist_egg --dist-dir C:[...]paramiko-masteregg-dist-tmp-6bh7ih warning: no files found matching '*' under directory 'docs' zip_safe flag not set; analyzing archive contents... Adding paramiko 1.16.0 to easy-install.pth file Installed c:python27libsite-packagesparamiko-1.16.0-py2.7.egg Processing dependencies for paramiko==1.16.0 Finished processing dependencies for paramiko==1.16.0
Готово:
>>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) >>> ssh.connect('54.***.***.110', username='username', key_filename='D:KeysMyOWNsetevoy_priv.ppk') >>> stdin, stdout, stderr = ssh.exec_command("uptime") >>> print stdout.channel.recv_exit_status() 0