2017-04-07 83 views
-1

我正在使用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。 –

回答

2

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)。 –