在 Linux 服务器上配置 FTP 远程连接,通常有几种主流方案,为了兼顾安全性和易用性,目前最推荐的方案是使用 SFTP(基于 SSH 的安全文件传输协议),因为它默认加密且无需额外安装软件,如果必须使用传统 FTP,则推荐使用 vsftpd。
以下是详细步骤:
使用 SFTP(推荐,最安全)
SFTP 是 SSH 的一部分,大多数 Linux 服务器默认已启用 SSH,因此无需额外安装 FTP 服务器软件。
确保 SSH 服务运行正常
sudo systemctl status sshd
如果未运行,请启动并设置开机自启:
sudo systemctl start sshd sudo systemctl enable sshd
配置防火墙(允许 SSH 端口,默认 22)
# Ubuntu/Debian sudo ufw allow 22/tcp # CentOS/RHEL sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
连接方式
使用任何支持 SFTP 的客户端工具(如 FileZilla、WinSCP、Xftp):
- 协议:选择 SFTP – SSH File Transfer Protocol
- 主机:服务器 IP 地址
- 端口:22(默认)
- 用户名/密码:你的 Linux 系统账号和密码
✅ 优点:无需额外安装软件,数据传输加密,配置简单。
使用 vsftpd(传统 FTP,需配置防火墙和加密)
如果你必须使用传统 FTP 协议(例如某些旧系统或特定软件要求),请使用 vsftpd。
安装 vsftpd
# Ubuntu/Debian sudo apt update sudo apt install vsftpd # CentOS/RHEL sudo yum install vsftpd
配置 vsftpd
编辑配置文件:
sudo nano /etc/vsftpd.conf
确保以下关键配置项如下(取消注释并修改):
# 允许本地用户登录 local_enable=YES # 允许写入 write_enable=YES # 限制用户在自己的主目录(防止越权访问) chroot_local_user=YES # 允许被动模式端口范围(用于防火墙配置) pasv_min_port=30000 pasv_max_port=31000 # 启用 SSL/TLS 加密(强烈建议) ssl_enable=YES rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
⚠️ 注意:
chroot_local_user=YES导致无法登录,可能是主目录权限问题,可将主目录设为只读,或创建一个子目录用于上传:allow_writeable_chroot=YES
重启服务
sudo systemctl restart vsftpd sudo systemctl enable vsftpd
配置防火墙(开放 FTP 端口)
FTP 使用 21 端口(命令通道)和动态数据端口,需开放 21 和被动模式端口范围:
# Ubuntu/Debian sudo ufw allow 21/tcp sudo ufw allow 30000:31000/tcp # CentOS/RHEL sudo firewall-cmd --permanent --add-port=21/tcp sudo firewall-cmd --permanent --add-port=30000-31000/tcp sudo firewall-cmd --reload
连接方式
使用 FTP 客户端:
- 协议:选择 FTP – File Transfer Protocol
- 主机:服务器 IP 地址
- 端口:21
- 用户名/密码:Linux 系统账号和密码
⚠️ 警告:传统 FTP 传输明文密码,极易被窃听,生产环境务必启用 SSL/TLS 或使用 SFTP。
使用 SFTP + 密钥认证(最高安全等级)
为避免密码泄露,建议使用 SSH 密钥登录 SFTP。
生成密钥(在本地电脑执行)
ssh-keygen -t rsa -b 4096
按提示生成,默认保存在 ~/.ssh/id_rsa。
上传公钥到服务器
ssh-copy-id user@your_server_ip
或手动将 id_rsa.pub 内容追加到服务器的 ~/.ssh/authorized_keys 文件中。
连接
在客户端中选择使用私钥文件进行身份验证,无需输入密码。
常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 防火墙未开放端口 | 检查 ufw 或 firewall-cmd 是否开放 22(SFTP)或 21/30000-31000(FTP) |
| 530 Login incorrect | 用户名/密码错误 | 确认账号是否存在,是否被锁定 |
| 500 OOPS: vsftpd: refusing to run with writable root inside chroot() | vsftpd 安全限制 | 在 /etc/vsftpd.conf 中添加 allow_writeable_chroot=YES,或为主目录创建子目录 |
| 被动模式连接失败 | 被动模式端口未开放 | 确保防火墙开放 pasv_min_port 到 pasv_max_port 范围,并在 vsftpd 配置中设置 pasv_address=你的公网IP |
总结建议
- 日常使用、个人项目、生产环境:✅ 使用 SFTP(方案一),安全、简单、无需额外配置。
- 必须使用传统 FTP:✅ 使用 vsftpd + SSL/TLS(方案二),并确保防火墙正确配置。
- 高安全要求:✅ 使用 SFTP + 密钥认证(方案三)。
请根据你的实际需求选择合适的方案,如有具体错误信息,可提供日志进一步排查。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/486600.html



