试图连接到FTP站点,但得到错误的SSL版本号错误?

问题描述:

我正在使用Python 2.7。 我最近成功地建立了一个连接到我的ftp站点使用端口990.但是,有一个un更新到我需要切换到端口22的站点。所以我改变的是端口号从990到22.然而,在我这样做,我得到了错误:试图连接到FTP站点,但得到错误的SSL版本号错误?

[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:661) 

我已经试过检查这表明HTTPS附加其他类似的帖子://现场。我使用FTP而不是URL,所以这对我来说不是一种可能性。我也试图改变SSL_VERSION到ssl.PROTOCOL_SSLv23但出现以下错误:

[SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:661) 

这里是我完整的代码提供。有谁知道这个问题是什么?谢谢你的帮助。

from ftplib import FTP_TLS 
import socket 
import ssl 

class tyFTP(FTP_TLS): 
    def __init__(self, host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=60): 
     FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, context, timeout) 
    def connect(self, host='', port=0, timeout=-999): 
     if host != '': 
      self.host = host 
     if port > 0: 
      self.port = port 
     if timeout != -999: 
      self.timeout = timeout 

     try: 
      self.sock = socket.create_connection((self.host, self.port), self.timeout) 
      self.af = self.sock.family 
      self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_TLSv1) 
      # self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_SSLv23) 
      self.file = self.sock.makefile('rb') 
      self.welcome = self.getresp() 
     except Exception as e: 
      print e 

    return self.welcome 

FTP_SITE = "sftp.MySite.com" 

UPLOAD = { 
    "USERNAME": "username", 
    "PASSWORD": "password" 
} 

DOWNLOAD = { 
    "USERNAME": "username", 
    "PASSWORD": "password" 
} 

server = tyFTP() 
# changed from 990. 990 works with no issues. 
server.connect(host=FTP_SITE, port=22) 
+0

他们有可能恢复到普通的旧FTP而不是SFTP。您是否尝试过不使用SSL的情况下访问服务器? – holdenweb

+0

他们向我保证他们正在使用SSL迁移到SFTP。 –

+0

SFTP不使用SSL,但使用SSH。 –

990是隐式FTPS的端口,而22是SSH的端口,因此也是SFTP的端口。我的猜测是,他们不只是切换端口,而是他们实际上从FTPS(通过SSL的FTP)切换到SFTP(通过SSH的文件传输)。这也暗示了您使用的主机名:sftp.MySite.com

FTPS和SFTP是完全不同的协议,您不能使用实现FTPS的代码连接到SFTP服务器。对于Python中支持S​​FTP的库,请参阅google search

+0

你说的有道理,我现在就试试。只是好奇,因为我在使用990端口时没有使用同一个站点'sftp.MySite.com'和代码。所以代码是为SFTP编写的,但仍然在端口990上工作。 –

+1

@Alex您的代码是为FTPS编写的,不是SFTP。 –

+0

@Alex:FTP_TLS是通过SSL/TLS实现FTP的库,即FTPS协议(端口990)而不是SFTP协议(端口22)。 –