【发布时间】:2019-01-14 16:02:42
【问题描述】:
我正在尝试使用 python 作为更广泛的 python 脚本的一部分将一些文件复制到 Azure 应用程序。
我可以使用 FTP 执行此操作,但我不知道如何使用 TLS 以安全的方式执行此操作。
我正在使用从 Azure 门户下载的凭据,单击“获取发布配置文件”,然后在 python 代码中使用它们,如下所示:
import ftplib
ftpServer = ftplib.FTP_TLS(host='waws-<...>.ftp.azurewebsites.windows.net',
user='<MY_USER>\$<MY_USER>',
passwd='<VERY_LONG_PSW>')
但是在执行ftpServer.cwd('<THE_PATH_TO_INSPECT>') 时,我看到:ConnectionRefusedError: [Errno 111] Connection refused
当使用 ftplib.FTP(...) 而不是 ftplib.FTP_TLS(...) 时,一切都按预期工作。
查看这里的 Python 文档 https://docs.python.org/3.5/library/ftplib.html 似乎我应该确保满足某种隐式/显式条件,但我不知道该怎么做。
阅读各种网络资源,似乎我应该使用与标准 21 不同的端口,有人说 990,有人说 989,但我不知道在 python 代码中在哪里指定这个不同的端口。
- 我的代码有什么问题?为什么我看到
Connection refused? - 如何让 python 代码通过 FTP 建立安全的 TLS 连接?
编辑 1:
似乎 FTP 的这种隐式连接与 TLS 版本 1.2 相关(根据 python 文档),我不是 100% 确定,因为我不熟悉这些标准,但是我已经尝试过但没有成功。
请记住<MY_USER>\$<MY_USER>(和密码)来自我作为“发布配置文件”从 Azure 门户下载的文件的内容,见下文:
$ python
Python 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 17:14:51)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>>
>>>
>>> import ftplib
>>>
>>>
>>> ftpServer = ftplib.FTP_TLS(host='waws-<...>.ftp.azurewebsites.windows.net',
... user='<MY_USER>\$<MY_USER>',
... passwd='<VERY_LONG_PSW>')
>>>
>>>
>>>
>>> ftpServer.dir()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/<MY_USER>/Conda/lib/python3.6/ftplib.py", line 575, in dir
self.retrlines(cmd, func)
File "/home/<MY_USER>/Conda/lib/python3.6/ftplib.py", line 468, in retrlines
with self.transfercmd(cmd) as conn, \
File "/home/<MY_USER>/Conda/lib/python3.6/ftplib.py", line 399, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "/home/<MY_USER>/Conda/lib/python3.6/ftplib.py", line 798, in ntransfercmd
conn, size = FTP.ntransfercmd(self, cmd, rest)
File "/home/<MY_USER>/Conda/lib/python3.6/ftplib.py", line 361, in ntransfercmd
source_address=self.source_address)
File "/home/<MY_USER>/Conda/lib/python3.6/socket.py", line 724, in create_connection
raise err
File "/home/<MY_USER>/Conda/lib/python3.6/socket.py", line 713, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
>>>
>>>
【问题讨论】:
标签: python-3.x azure azure-functions ftplib ftps