FTP远程连接Linux服务器失败或远程备份中断时,九成以上问题出在端口未放行、被动模式配置错误或SELinux拦截这三处,按顺序排查即可解决。
排查FTP远程连接Linux服务器失败的核心步骤
先确认端口通不通,再谈其他
当你发现FTP远程连接Linux服务器超时或直接拒绝连接,第一步不要急着改配置文件,先确认网络层面是否通畅,Linux服务器默认FTP端口是21,SFTP走的是22端口,在本地电脑的命令行里执行:
telnet 服务器IP 21
如果卡住不动或提示无法连接,说明网络层就没通,这时候需要检查云服务商的安全组规则,简米云、酷番云这类平台的控制台里,安全组入方向必须放行TCP 21端口,如果你用的是FTP主动模式,还要放行20端口;被动模式则需要放行一个端口范围,比如30000-40000。
业内专家指出,相当一部分用户搞混了安全组和系统防火墙的区别,两边都要放行才行,系统防火墙用以下命令放行:
firewall-cmd --permanent --add-port=21/tcp firewall-cmd --permanent --add-port=30000-40000/tcp firewall-cmd --reload
vsftpd配置文件的三个关键参数
多数情况下,FTP远程连接Linux服务器失败是因为vsftpd配置没跟上网络环境,编辑/etc/vsftpd/vsftpd.conf,重点检查这三个参数:
listen_port=21:确保FTP监听端口是21pasv_enable=YES:开启被动模式pasv_min_port=30000和pasv_max_port=40000:设定被动模式端口范围
修改完成后重启服务:
systemctl restart vsftpd
很多人在本地测试一切正常,换到外网就连不上,问题就出在被动模式端口没放行,你本地连的时候走的是主动模式,外网访问时走了被动模式,端口被拦自然失败。
SELinux和连接数限制的坑
行业共识认为,SELinux是Linux服务器上最容易被忽略的FTP故障源,如果你发现端口通了、防火墙也放行了,但FTP远程连接Linux服务器还是失败,执行:
getsebool -a | grep ftp
看到ftpd_full_access为off时,用下面命令开启:
setsebool -P ftpd_full_access on
/etc/vsftpd/vsftpd.conf里的max_clients和max_per_ip参数如果设置过小,会导致连接被拒绝,比如你设置了max_clients=5,第六个人来连接就会报错,这个参数要根据服务器实际负载调整,别照抄网上的模板。
远程备份失败时,SFTP是更稳的选择
FTP明文传输的隐患
FTP远程连接Linux服务器用于备份时,账号密码和文件内容都是明文传输的,在公网环境下,抓包工具一抓就能看到你的密码,如果你在机房或者IDC托管环境,用FTP备份数据相当于把密码贴在大门上。
此时建议切换到SFTP方案,SFTP基于SSH协议,走22端口,加密传输,不需要额外搭建FTP服务,Linux服务器上只要SSH服务正常运行,就能用SFTP连接。
SFTP连接和备份的具体操作
Windows用户用WinSCP或Xftp连接,协议选择SFTP,端口22,输入服务器账号密码即可,Linux之间传输文件用命令行:
sftp user@服务器IP put /local/path/file /remote/path/ get /remote/path/file /local/path/
SFTP远程备份失败的概率比FTP低得多,因为不需要处理被动模式端口和SELinux对FTP的额外限制,如果你在简米云上买了Linux服务器,直接使用SFTP做远程备份,配合crontab定时任务,基本能解决大部分备份失败问题。
密钥认证配置方法
SFTP用密码认证还是不够安全,建议配置密钥登录,本地生成密钥对:
ssh-keygen -t rsa -b 4096 ssh-copy-id user@服务器IP
配置完成后,SFTP连接默认走密钥认证,密码登录直接禁用,这样即使密码泄漏,攻击者也无法登录服务器,密钥文件一定要保存好,丢了就只能通过云控制台重置。
FTP/SFTP远程备份失败的全方位排查清单
检查磁盘空间和权限
备份失败很多时候不是连接问题,而是服务器端写不进去,登录服务器执行:
df -h
看到使用率超过90%,备份文件写入大概率会失败,FTP用户对目标目录必须有写权限,比如你用的FTP账号是backup,目标目录是/data/backup,执行:
chown -R backup:backup /data/backup chmod -R 755 /data/backup
有些系统默认FTP用户被限制在家目录内,无法访问其他路径,vsftpd的chroot_local_user=YES参数就是干这个的,如果你需要FTP账号能访问多个目录,要么关闭chroot,要么用mount –bind把目录绑定到用户家目录下。
备份脚本的常见问题
定时备份失败时,脚本本身出问题的概率最大,路径写错是最常见的,比如脚本里写的路径是/home/user/file,但实际文件在/data/file,脚本执行权限没给到位也会失败:
chmod +x /opt/backup.sh
用crontab -e查看定时任务,确保脚本路径和执行时间正确,建议先在命令行手动执行一次脚本,确认没问题再挂到crontab上,手动执行成功但定时执行失败,多半是环境变量的问题,脚本开头加上:
#!/bin/bash source /etc/profile
带宽和网络稳定性影响
如果你在杭州或成都这类城市有分公司,跨地域备份时网络延迟高、丢包率高,大文件备份经常中断,这种情况下SFTP也不一定稳,建议改用rsync做增量备份,断点续传能力比FTP强很多,rsync命令:
rsync -avz --progress /local/path/ user@服务器IP:/remote/path/
配合Screen或tmux在后台执行,避免终端断开导致备份中断,如果你需要找专业的FTP远程连接Linux服务器多少钱的解决方案,实际上用rsync+SFTP组合的成本为零,只是需要花点时间配置。
备份策略和恢复验证
全量备份与增量备份结合
每天全量备份耗时又占空间,合理做法是每周一次全量备份,每天做增量备份,用rsync的--link-dest参数实现:
rsync -avz --link-dest=/backup/$(date -d yesterday +%Y%m%d) /data/ user@服务器IP:/backup/$(date +%Y%m%d)
这样每天生成一个完整快照,但实际占用空间只相当于增量数据,备份数据保留30天足够,超过30天的旧备份自动清理:
find /backup -type d -mtime +30 -exec rm -rf {} \;
备份恢复测试不能省
备份文件能正常生成不代表能恢复,每个季度至少做一次恢复演练,把备份文件下载到临时目录,解压后检查文件完整性,如果恢复出来的文件无法使用,这个备份就没有任何意义。
恢复测试时重点关注数据库备份,MySQL的备份文件是SQL格式的,用以下命令测试导入:
mysql -u root -p < backup.sql
如果导入报错,说明备份期间数据库有写入操作导致数据不一致,生产环境备份数据库前,先执行FLUSH TABLES WITH READ LOCK锁定表,备份完成后再解锁。
FTP/SFTP远程备份失败常见问题解答
问:FTP远程连接Linux服务器时提示530 Login incorrect,密码明明是对的为什么登录失败?
答:检查/etc/vsftpd下的用户列表文件,确认FTP账号在/etc/vsftpd/user_list或/etc/vsftpd/chroot_list中,如果配置了userlist_deny=YES,user_list中的用户会被拒绝登录,某些系统默认禁止root用户通过FTP登录,需要注释掉/etc/vsftpd/ftpusers中的root行,但出于安全考虑不建议这样做。
问:SFTP远程备份断断续续,传输大文件时经常中断怎么办?
答:在SSH配置文件/etc/ssh/sshd_config中调大ClientAliveInterval和ClientAliveCountMax参数,防止长时间无操作被服务器断开,同时检查本地网络,使用有线网络替代Wi-Fi,或者改用rsync的分块传输模式,支持断点续传。
问:公司在北京,服务器在上海,FTP远程连接时延迟高、传输速度慢,怎么优化?
答:先确认服务器带宽是否充足,如果带宽只有1Mbps,传输速度上限就是128KB/s,这种情况下建议升级带宽,或者改用SFTP配合压缩传输参数-C,如果距离导致的延迟问题,可以购买CDN加速服务或使用专线连接,但成本较高,对于大多数中小企业,直接使用SFTP并调整TCP拥塞控制算法就能获得明显改善。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/558950.html

