【问题标题】:Python pysft/paramiko 'EOF during negotiation' errorPython pysft/paramiko '谈判期间的 EOF' 错误
【发布时间】:2016-11-28 00:30:16
【问题描述】:

我正在使用 pysftp 下载和上传一些文件。这个完全相同的代码我在一小时前刚刚运行并且很好,但现在我得到了这个“谈判期间的EOF”错误。我在这里错过了什么?

>>> sftp = pysftp.Connection(host, username=user, password=pasw)
>>> sftp
<pysftp.Connection object at 0x7f88b25bb410>
>>> sftp.cd('data')
<contextlib.GeneratorContextManager object at 0x7f88b1a86910>
>>> sftp.exists(filename)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pysftp/__init__.py", line 827, in exists
    self._sftp_connect()
  File "/usr/local/lib/python2.7/dist-packages/pysftp/__init__.py", line 205, in _sftp_connect
    self._sftp = paramiko.SFTPClient.from_transport(self._transport)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 132, in from_transport
    return cls(chan)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 101, in __init__
    raise SSHException('EOF during negotiation')
paramiko.ssh_exception.SSHException: EOF during negotiation

编辑: 为 paramiko.transport 启用登录并获得以下信息:

>>> import logging; logging.basicConfig(); logging.getLogger('paramiko.transport').setLevel(logging.DEBUG)
>>> sftp = pysftp.Connection(host, username=user, password=pasw)
DEBUG:paramiko.transport:starting thread (client mode): 0x27313b0L
DEBUG:paramiko.transport:Local version/idstring: SSH-2.0-paramiko_1.16.0
DEBUG:paramiko.transport:Remote version/idstring: SSH-2.0-OpenSSH_4.3p2
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_4.3p2)
DEBUG:paramiko.transport:kex algos:[...] client lang:[u''] server lang:[u''] kex follows?False
DEBUG:paramiko.transport:Kex agreed: diffie-hellman-group1-sha1
DEBUG:paramiko.transport:Cipher agreed: aes128-ctr
DEBUG:paramiko.transport:MAC agreed: hmac-sha2-256
DEBUG:paramiko.transport:Compression agreed: none
DEBUG:paramiko.transport:kex engine KexGroup1 specified hash_algo <built-in function openssl_sha1>
DEBUG:paramiko.transport:Switch to new keys ...
DEBUG:paramiko.transport:Attempting password auth...
DEBUG:paramiko.transport:userauth is OK
INFO:paramiko.transport:Authentication (password) successful!
>>> sftp.cd('data')
<contextlib.GeneratorContextManager object at 0x027371D0>
>>> sftp.exists(filename)
DEBUG:paramiko.transport:[chan 0] Max packet in: 32768 bytes
DEBUG:paramiko.transport:[chan 0] Max packet out: 32768 bytes
DEBUG:paramiko.transport:Secsh channel 0 opened.
DEBUG:paramiko.transport:[chan 0] Sesch channel 0 request ok
Traceback (most recent call last):
DEBUG:paramiko.transport:[chan 0] EOF received (0)
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\pysftp.py", line 802, in exists
DEBUG:paramiko.transport:[chan 0] EOF sent (0)
    self._sftp_connect()
  File "C:\Python27\lib\site-packages\pysftp.py", line 192, in _sftp_connect
    self._sftp = paramiko.SFTPClient.from_transport(self._transport)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 132, in from_transport
    return cls(chan)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 101, in __init__
    raise SSHException('EOF during negotiation')
paramiko.ssh_exception.SSHException: EOF during negotiation
>>>

仍然不知道出了什么问题......

【问题讨论】:

  • 事实证明,Paramiko 不适用于某些 SSH 实现。实际上,他们立即在FAQ page 上声明了这一点。例如,我无法让 Paramiko 连接到 CirrOS VM,而相同的代码在 CentOS 机器上运行良好。

标签: python python-2.7 paramiko pysftp


【解决方案1】:

我在使用密码验证的程序中遇到了同样的错误。发现这是因为 SFTP 服务器上的密码已过期。重置它,一切正常。

【讨论】:

【解决方案2】:

这就是我修复的方法:“/etc/ssh/sshd_config” 我正在使用 centos,然后我看到了这一行(#),这对我来说是 sftp 的错误二进制文件,然后我找到了好的那个,它似乎对我有用:

Subsystem sftp /usr/libexec/openssh/sftp-server
#Subsystem sftp /usr/lib/openssh/sftp-server

对于 lsb 或 debian 试试这个:

Subsystem sftp internal-sftp

谢谢。

【讨论】:

    【解决方案3】:

    原来这是 SFTP 服务器中的连接问题。联系了修复它的 SFTP 管理员,现在相同的代码可以正常工作。

    【讨论】:

    • 不要认为这是一个答案。没有关于如何解决问题的详细信息或步骤。投反对票。
    【解决方案4】:

    对于它的价值,在我的特殊情况下,这是因为有人在 OpenSSH 中注释掉了 SFTP 子系统。在此处阅读有关如何启用它的更多信息:https://serverfault.com/q/660160/453708

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多