用FileZilla连接树莓派一切正常,尝试上传文件时前一两分钟还好好的,文件传输到一半开始有失败,然后就持续传输失败。

状态:    连接建立,等待欢迎消息...
响应:    220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
响应:    220-You are user number 3 of 5000 allowed.
响应:    220-Local time is now 21:26. Server port: 21.
响应:    220-This is a private system - No anonymous login
响应:    220-IPv6 connections are also welcome on this server.
响应:    220 You will be disconnected after 15 minutes of inactivity.
错误:    20 秒后无活动,连接超时
错误:    文件传输失败

网上有一种说法是因为树莓派的SSH默认开启反向解析DNS功能,遍历DNS服务器查域名费时,导致FileZilla连接超时,解决方案就是修改配置文件。

vim /etc/ssh/sshd_config

在文件最后添加:

UseDNS=no

保存后退出,并重启ssh服务

sudo service ssh restart

按照该方法试了一下,传输文件的时间貌似稍微延长了一些,但是中途仍然会中断。
难道又是因为OneinStack安装的Pure-FTPd不能正常运行?那就直接卸载了,用树莓派自带的。

sudo apt-get install pure-ftpd
pure-pw list

错误提示“Unable to open the passwd file: 没有那个文件或目录”
按照网上的教程,安装pure-ftpd后应先创建用户组和用户,然后再增加供ftp的虚拟用户。

sudo groupadd ftpgroup
sudo useradd ftpuser -g ftpgroup -s /sbin/nologin -d /dev/null
sudo pure-pw useradd upload -u ftpuser -g ftpgroup -d /home/pi/FTP -m

事实上,因为上传文件主要用于网站,所以用户组和用户均为www,并且早已经创建好了。
所以只需执行最后一条,把ftpuserftpgroup修改为www,然后把upload改成你希望的FTP用户名,/home/pi/FTP改成你想上传文件的目录。

sudo pure-pw useradd pi_admin -u www -g www -d /data/wwwroot -m

回车后,系统会要求你输入新建用户的密码,连续两次之后,用户创建完毕。
接着,建立虚拟用户数据,输入代码如下:

sudo pure-pw mkdb

你可以通过以下代码来检验用户的创建情况。

pure-pw show pi_admin

pure-pw-show.png
最后,在/etc/pure-ftpd/auth下,创建一个软链接

ln -s /etc/pure-ftpd/conf/PureDB 60puredb

重新打开FileZilla,连接……
530错误,连接失败!排查了一个多小时才发现是因为密码记录软件中的FTP密码和FileZilla中保存的密码不一致,重新修改,终于连接上了。(不得不说,太依赖软件的记忆功能,加上修改保存不及时,浪费自己多少宝贵时间)
上传文件到树莓派,不再中断,可依然有文件传输失败。检查发现,全部都是以.开头的隐藏文件,并报553错误。
修改设置文件还是没有用。为什么正常文件传输都没问题,唯独隐藏文件不行呢?
胡乱搜索后,抱着不妨一试的心态,查看刚才设置的上传文件夹,发现它的所有权是root,修改属性后,再次上传一切顺利。

最后根据官网的修改建议,整理代码如下:

echo 'yes' > /etc/pure-ftpd/conf/ChrootEveryone
echo 'yes' > /etc/pure-ftpd/conf/NoAnonymous
echo 'yes' > /etc/pure-ftpd/conf/AnonymousCantUpload
echo 'no' > /etc/pure-ftpd/conf/AnonymousCanCreateDirs
echo 'yes' > /etc/pure-ftpd/conf/DisplayDotFiles
echo 'yes' > /etc/pure-ftpd/conf/DontResolve
echo 'no' > /etc/pure-ftpd/conf/ProhibitDotFilesRead
echo 'no' > /etc/pure-ftpd/conf/ProhibitDotFilesWrite
echo 'UTF-8' > /etc/pure-ftpd/conf/FSCharset

备注:
网上有很多文章说可以修改配置文件,可是树莓派自动安装后根本就找不到所谓的/etc/pure-ftpd.conf文件,而所有配置文件均位于/etc/pure-ftpd/conf下,并且每一条设置都是以一个文件的形式保存。

至于之前为何会中途超时中断,好像是跟树莓派默认安装的VSFTP有关,搜索过程中看到有网友提过,也是因此才更换成Pure-FTPd,具体文章现在找不到了。

参考文档:
树莓派官方FTP文档

最后修改:2020 年 03 月 23 日
如果觉得我的文章对你有用,请随意赞赏