【问题标题】:paramiko: NameError: global name 'descriptor' is not definedparamiko:NameError:未定义全局名称“描述符”
【发布时间】:2018-02-23 03:13:22
【问题描述】:

我正在尝试将paramiko 用于 SSH,但出现错误:

>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect('54.***.***.110', key_filename='D:\Keys\MyOWN\priv.ppk')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build\bdist.win32\egg\paramiko\client.py", line 366, in connect
  File "build\bdist.win32\egg\paramiko\client.py", line 515, in _auth
  File "build\bdist.win32\egg\paramiko\agent.py", line 343, in __init__
  File "build\bdist.win32\egg\paramiko\agent.py", line 66, in _connect
  File "build\bdist.win32\egg\paramiko\agent.py", line 83, in _send_message
  File "build\bdist.win32\egg\paramiko\win_pageant.py", line 123, in send
  File "build\bdist.win32\egg\paramiko\win_pageant.py", line 89, in _query_pageant
  File "build\bdist.win32\egg\paramiko\_winapi.py", line 273, in get_security_attributes_for_user
  File "build\bdist.win32\egg\paramiko\_winapi.py", line 222, in descriptor
NameError: global name 'descriptor' is not defined

关于this issue - 已解决,但是 - 我仍然有这个错误(最新的paramiko 版本,从它的 Github 下载)。

可能 - 还有其他一些库,可以通过 SSH 和 RSA 密钥授权来工作吗? 或者 - 任何解决此问题的方法NameError...

【问题讨论】:

    标签: python python-2.7 ssh


    【解决方案1】:

    似乎问题并没有真正解决(我也下载了最新的 zip:它也可以在 [GitHub]: paramiko/paramiko - (v1.15.2) paramiko/paramiko/_winapi.py 上看到),所以你必须自己在 paramiko 安装文件中修复它(已在 v1.15.3 中修复):

    • 编辑您的 ${PYTHON_DIR}\build\bdist.win32\egg\paramiko\_winapi.py${PYTHON_DIR} 只是您的 的占位符>Python 安装目录), 在 222223 行只需将 descriptor 替换为 value

      self._descriptor = descriptor
      self.lpSecurityDescriptor = ctypes.addressof(descriptor)
      

      应该变成:

      self._descriptor = value
      self.lpSecurityDescriptor = ctypes.addressof(value)
      

    【讨论】:

    • 看起来正确,但在我将其更改为 self._descriptor = value 后 - 仍然有同样的错误 - NameError: global name 'descriptor' is not defined;虽然 - 我重新安装了 paramico 并重新启动了我的 Python 解释器;可能我错过了什么?
    • 我说你还需要修改下一行(223):self.lpSecurityDescriptor = ctypes.addressof(value)。 (不要触摸行首的空格)。
    • 天啊!抱歉 :-) 没有注意下一行 :-)
    【解决方案2】:

    我曾经遇到过这种类型的错误。我重启了机器,就解决了!

    但我认为 paramiko 库中存在错误。 CristiFati 解释的将descriptor 更改为value 可以正常工作。

    【讨论】:

    • 重启机器也对我有用!非常感谢!
    【解决方案3】:

    我也遇到了这个问题,请尝试设置allow_agent=False,应该可以解决。

    import paramiko
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('54.***.***.110', key_filename='D:\Keys\MyOWN\priv.ppk', allow_agent=False)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2018-05-04
      • 2015-12-22
      • 2014-04-18
      • 2015-08-08
      • 2011-04-27
      • 2013-09-04
      相关资源
      最近更新 更多