ftplib.FTP_TLS无法启动密钥交换

时间:2017-06-14 08:40:56

标签: python ssl ftp

我在使用Python3 ftplib为客户端连接SSH到WS-FTP服务器时遇到问题。

这是一个小例子:

import ftplib
sess = ftplib.FTP_TLS()
sess.connect(<hostname>, 22)

这只是在sess.connect中挂起。这是来自connect()的追溯:

Traceback (most recent call last):
  File "o:/Thy.Python/logls.py", line 19, in <module>
    logs = u.newSession()
  File "/cygdrive/o/Thy.Python/logutils.py", line 41, in newSession
    sess.connect(findsys(), 22)
  File "/usr/lib/python3.6/ftplib.py", line 155, in connect
    self.welcome = self.getresp()
  File "/usr/lib/python3.6/ftplib.py", line 234, in getresp
    resp = self.getmultiline()
  File "/usr/lib/python3.6/ftplib.py", line 224, in getmultiline
    nextline = self.getline()
  File "/usr/lib/python3.6/ftplib.py", line 202, in getline
    line = self.file.readline(self.maxline + 1)
  File "/usr/lib/python3.6/socket.py", line 586, in readinto
    return self._sock.recv_into(b)

Wireshark显示了这一点:

2017-06-14 11:26:21.623858 <Client> <Server> TCP 66 57092 › 22 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
2017-06-14 11:26:21.625280 <Server> <Client> TCP 62 22 › 57092 [SYN, ACK] Seq=0 Ack=1 Win=4380 Len=0 MSS=1460 SACK_PERM=1
2017-06-14 11:26:21.625428 <Client> <Server> TCP 54 57092 › 22 [ACK] Seq=1 Ack=1 Win=64240 Len=0
2017-06-14 11:26:21.649362 <Server> <Client> SSH 78 Server: Protocol (SSH-2.0-WS_FTP-SSH_7.7)
2017-06-14 11:26:21.843439 <Client> <Server> TCP 54 57092 › 22 [ACK] Seq=1 Ack=25 Win=64216 Len=0

有两件事突出:

  • ftplib()(或其下属库)似乎没有发送SSH客户端:协议消息
  • 服务器响应其Server:Protocol消息后,ftplib只发送一个ACK并且不启动密钥交换。

有人能说明发生了什么,以及如何解决这个问题?我担心我在这里的能力悬崖边缘。

1 个答案:

答案 0 :(得分:0)

事实证明,服务器是SFTP服务器,而不是FTPS。 this question的答案建议Paramiko或Twisted