我正在使用 Python 2.7。 我最近使用端口 990 成功建立了到我的 ftp 站点的连接。但是,我需要切换到端口 22 的站点没有更新。所以我只更改了端口号从 990 到 22。但是,在我之后这样做我得到了错误:
[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 是完全不同的协议(protocol),您不能使用实现 FTPS 的代码连接到 SFTP 服务器。对于在 Python 中支持 SFTP 的库,请参阅 google search .
关于python - 尝试连接到 FTP 站点但收到错误的 SSL 版本号错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279452/