试图连接到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)
990是隐式FTPS的端口,而22是SSH的端口,因此也是SFTP的端口。我的猜测是,他们不只是切换端口,而是他们实际上从FTPS(通过SSL的FTP)切换到SFTP(通过SSH的文件传输)。这也暗示了您使用的主机名:sftp.MySite.com
。
FTPS和SFTP是完全不同的协议,您不能使用实现FTPS的代码连接到SFTP服务器。对于Python中支持SFTP的库,请参阅google search。
你说的有道理,我现在就试试。只是好奇,因为我在使用990端口时没有使用同一个站点'sftp.MySite.com'和代码。所以代码是为SFTP编写的,但仍然在端口990上工作。 –
@Alex您的代码是为FTPS编写的,不是SFTP。 –
@Alex:FTP_TLS是通过SSL/TLS实现FTP的库,即FTPS协议(端口990)而不是SFTP协议(端口22)。 –
他们有可能恢复到普通的旧FTP而不是SFTP。您是否尝试过不使用SSL的情况下访问服务器? – holdenweb
他们向我保证他们正在使用SSL迁移到SFTP。 –
SFTP不使用SSL,但使用SSH。 –