You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2实例无法连接NAS,如何用Python实现NAS到S3每日文件传输?

问题描述

我需要每日定期将NAS驱动器中的文件传输至AWS S3,尝试通过Python脚本从AWS EC2实例连接NAS共享驱动器并拉取数据,但无法建立连接。本地机器使用相同的NAS凭证可正常连接并拉取数据,且已为EC2配置SMB 445端口的入站和出站安全规则。

使用的Python代码:

from smb.SMBConnection import SMBConnection
conn = SMBConnection('userxxx', 'pwdyyy', 'xxxx', 'yyyy',use_ntlm_v2=True,is_direct_tcp=True)
conn.connect('servername',445)

连接NAS时出现如下错误信息:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/local/lib/python3.7/site-packages/smb/SMBConnection.py", line 120, in connect
 self.sock = socket.create_connection(( ip, port ), timeout = timeout)
 File "/usr/lib64/python3.7/socket.py", line 707, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib64/python3.7/socket.py", line 752, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

解决建议

  • 排查DNS解析问题:错误提示明确是EC2实例无法解析NAS的servername域名。在EC2终端执行ping servername或nslookup servername验证解析结果。若解析失败,可在EC2的/etc/hosts文件中手动添加NAS域名与IP的映射,或确认EC2所在VPC的DNS服务器能正常解析该域名。
  • 验证网络连通性:即使DNS正常,也要确认EC2到NAS的445端口是否可达。在EC2终端执行telnet <NAS_IP> 445或nc -zv <NAS_IP> 445,若连接失败,需检查:
    • NAS是否处于EC2可访问的网络环境(同VPC、对等连接、VPN或公网);
    • NAS自身防火墙是否允许EC2的IP访问445端口;
    • AWS安全组出站规则是否确实开放了445端口(针对NAS IP或全量)。
  • 核对SMB连接参数:
    • 确认servername是NAS的正确主机名或IP,无拼写错误;
    • 检查构造函数中的my_name(第四个参数yyyy)是否符合NAS的客户端主机名限制;
    • 尝试移除is_direct_tcp=True参数,部分旧NAS不支持直接TCP连接SMB,可改用NetBIOS over TCP(默认端口139),同时开放EC2安全组的139端口出站规则。
  • 用原生工具测试连接:在EC2上安装smbclient(Linux环境),执行smbclient //servername/sharename -U userxxx,输入密码后测试连接。若命令行工具能连接,说明Python脚本参数存在问题;若仍失败,继续排查网络或NAS配置。

内容的提问来源于stack exchange,提问作者Naveenkumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:57:16