总体情况是这样的:我的相机有一张 SD 卡,它通过 WiFi 使用 ftp 将照片上传到服务器。我想要的是将这些照片上传到我拥有的一个小 ubuntu 盒子上。为了安全起见,我使用 ftp over ssl(该卡不支持 sftp)。ubuntu 盒子位于我的路由器后面,因此我将外部端口 223 路由到 ubuntu 的 21。
我跟着这一页在我的服务器上设置 vsftpd,90% 正确。我可以看到(在 vsftpd.log 中)远程服务器正在登录,并且它正在创建文件夹和文件,但它创建的所有文件的长度为零,并且 vsftp.log 显示
FAIL UPLOAD: Client "199.192.198.3", "/files/2015-06-22/DSC_0009.JPG", 0.00Kbyte/sec
于是我查阅了 ftp 资料,并尝试在我的设置中添加被动模式,包括在我的路由器上映射适当的端口。但毫无效果。
这是我的 vsftp.conf:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
#
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
#
require_ssl_reuse=NO
ssl_ciphers=HIGH
#
pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090
我的路由器有端口 10090:10100 映射到 ubuntu 框。
答案1
FTP 是您可能遇到的最差劲的协议之一。由于协议的复杂性(它使用一个连接来发送和接收命令,使用另一个连接来传输信息),大多数网关都实施了 ftp 代理,以便能够将 FTP 流量重定向到内部服务器。无论如何,尝试从服务器同一子网中的计算机上传,如果仍然失败,请检查权限。