我正在使用Python 2.7。 我最近使用端口990成功建立了与我的ftp站点的连接。但是,我需要切换到端口22的站点没有更新。所以我改变的是从990到22的端口号。但是,在我之后这样做我得到了错误:
[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:661)
我已尝试查看其他类似帖子,建议在网站上添加https://。我使用FTP而不是网址,所以这对我来说不太可能。我也尝试将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 :(得分:2)
990是隐式FTPS的端口,而22是SSH的端口,因此也是SFTP的端口。我的猜测是他们不只是切换端口,而是他们实际上从FTPS(FTP over SSL)切换到SFTP(通过SSH传输文件)。这也表明您使用的主机名:sftp.MySite.com
。
FTPS和SFTP是完全不同的协议,您不能使用实现FTPS的代码连接到SFTP服务器。对于支持Python中SFTP的库,请参阅google search。