无法通过Node.js与FTP连接Ubuntu 22服务器,需排查哪些内容?
FTP连接被拒绝(ECONNREFUSED)的排查方案
问题场景
使用Node.js的basic-ftp库尝试连接Ubuntu 22服务器传输文件时,返回错误:
Error: connect ECONNREFUSED XXX:21 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: 'XXX', port: 21 }
且服务器/var/log/auth.log中无相关记录。
原因分析
ECONNREFUSED表示客户端无法与服务器的21端口建立TCP连接,连接请求根本没到达认证环节,因此auth.log不会生成相关日志是正常现象。
排查步骤
1. 检查服务器是否安装FTP服务
Ubuntu常用的FTP服务是vsftpd,执行以下命令确认是否安装:
dpkg -l | grep vsftpd
如果无输出,说明未安装,执行以下命令安装:
apt update && apt install vsftpd -y
2. 确认FTP服务是否正常运行
检查服务状态:
systemctl status vsftpd
如果显示active (running)则正常;若未运行,启动服务并设置开机自启:
systemctl start vsftpd systemctl enable vsftpd
3. 检查防火墙是否开放21端口
Ubuntu 22默认使用ufw防火墙,查看当前规则:
ufw status
若未看到21/tcp的允许规则,添加并重载防火墙:
ufw allow 21/tcp ufw reload
4. 测试端口连通性
在客户端机器上执行以下命令,验证服务器21端口是否可访问:
nc -zv XXX 21
如果输出succeeded!说明端口正常;若仍显示拒绝,需检查服务器是否有其他安全组/网络ACL限制(比如云服务器的安全组规则)。
5. 检查FTP服务配置(可选,前面步骤解决后仍有问题时)
编辑vsftpd配置文件:
nano /etc/vsftpd.conf
确认以下配置项:
local_enable=YES:允许本地用户登录write_enable=YES:允许写入操作- 若使用root用户登录,检查
userlist_deny=YES时,/etc/vsftpd.user_list或/etc/vsftpd.ftpusers中是否包含root,若有则移除(不建议用root登录FTP,推荐创建专用FTP用户)
修改后重启服务:
systemctl restart vsftpd
内容的提问来源于stack exchange,提问作者aa bb
相关产品推荐
相关产品推荐

