FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务
FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务
前言
最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器。按照从前的思路,自然是,先将文件传到电脑,再由电脑上传到 FTP 服务器上;经过一份搜索后找到了 质感文件 这个 Android 应用,这样就可以通过无线网直接连接 FTP 服务器了。
FTP 基础
- FTP 需要两个端口,一个是数据端口,一个是控制端口。在主动模式下,控制端口一般为21,数据端口一般为20(控制端口 - 1);在被动模式下,由服务器端和客户端协商决定。
- FTP 地址为:ftp://用户名:密码@IP地址或域名:控制端口号
- FTP 的传输方式有两种:
(1)ASCII传输方式,即假定用户正在拷贝的文件包含简单的ASCII码文本,通常传输时会自动调整格式
(2)二进制传输模式,即逐位传输 - FTP 的工作模式有两种:
(1)PORT主动模式,意为服务端主动从20端口连接客户端告知的端口
(2)PASV被动模式,意为服务端 告知 客户端 地址和端口后,等待客户端连接
(3)对比:主动模式需要客户端必须开放端口给服务器,服务器要可以连上客户端,这就要求客户端为公网 IP(经过 NAT 后地址就变化了)且防火墙打开。而实际情况下,公网 IP 比较少而且很多客户端都是在防火墙内,由路由器交换机进行着 NAT,还要协调开放端口。被动模式只需要服务器端开放端口给客户端连接就行了,而服务器为了便于访问,一般会放在公网,所以被动模式使用较多。 - 主动被动模式选择权在客户端
此处比较奇怪,为什么服务器会告知客户端地址,直接让客户端使用访问服务器时的地址不可以吗?我的思考是,机器一般无法取得自己外网的地址,而且 FTP 协议中确有要求,要传输地址:
这里可能就会好奇了,前面的地址好理解,后面的两个数字是什么意思。通过这篇文章得知,端口号为数字1 * 256 + 数字2
,Wireshark 中的截图也印证了这一点:
使用 Docker 搭建 Vsftpd 的 FTP 服务
我们使用的 Docker 镜像为 fauria/vsftpd。
docker run -d -v /root/ftp:/home/vsftpd \
--p 60020:20 -p 60021:21 -p 61100-61105:61100-61105 \
-e FTP_USER=battor -e FTP_PASS=nihaonihao123123 \
-e PASV_ADDRESS=1.2.3.4 -e PASV_MIN_PORT=61100 -e PASV_MAX_PORT=61105 \
--name vsftpd --restart=always fauria/vsftpd
-v 意为将容器中的路径映射到本地文件系统(“冒号”前为 本地文件系统路径,“冒号”后为 容器中的文件系统路径)。
-p 意为将容器的端口号映射到本地,可以看到映射了一个范围的地址,这些端口是被动模式下开放给客户端的,要与后面的 PASV_MIN_PORT (被动模式最小端口) 和 PASV_MAX_PORT (被动模式最大端口) 相对应。
--name 用于指定容器名称。
--restart 意为当 Docker 进程重启时,立刻启动该容器。
我们自己部署服务器时,应当尽量避免使用默认端口,以减少被黑客攻击的风险。故此处使用 60020 和 60021,以及 61100 至 61105 端口
此外需要注意的是,PASV_ADDRESS 需要配置为服务器对应的外网地址。否则无法连接:
然鹅在 FileZilla 客户端测试中发现,即使 配置为 127.0.0.1,某些客户端亦可以正常连接,猜测是因为客户端中存在类似的设置:
后记
由于 FTP 中的文件较为隐私,在这里就不展示配置成功后的效果了,实际使用起来还是很方便滴。
再次推荐下 质感文件 这个 APP 吧,界面 Material Design 风格,好看好用。支持 FTP 服务器,SFTP 服务器, SMB 服务器,还可作为 FTP 服务器使用。
参考
fauria/vsftpd
227 Entering Passive Mode 含义
FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务的更多相关文章
- Docker 搭建 ELK 读取微服务项目的日志文件
思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...
- 通过 docker 搭建自用的 gitlab 服务
前言 git 是当下如日中天的版本管理系统.现在如果不是工作在 git 版本管理系统之下,几乎都不好意思和人打招呼了.有很多现成的互联网的 git 服务提供给大家使用,例如号称程序员社交网络的 Git ...
- 【docker构建】基于docker搭建redis数据库缓存服务
搭建redis服务 首先拉取镜像==>运行镜像为容器 # 先搜索下redis镜像 [root@VM_0_10_centos wordpress]# docker search redis # 拉 ...
- 十一、Docker搭建部署SpringCloud微服务项目Demo
环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...
- 如何在CentOS 7上使用vsftpd设置ftp服务器
一.前言介绍 FTP(文件传输协议)是一种标准的客户机-服务器网络协议,允许用户在远程网络之间传输文件. 有几个开源的FTP服务器可用于Linux.最受欢迎和广泛使用的是pureftpd.proftp ...
- docker 搭建 web 服务环境
docker容器虽然早就听说过,但是本人还真的没去用过,刚好看到相关的文章,就分享了下,有机会可以实践下...... 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都 ...
- docker 部署vsftpd服务、验证及java ftp操作工具类
docker部署vsftpd服务 新建ftp文件存储目录/home/ftp cd /home mkdir ftp 创建一个组,用于存放ftp用户 groupadd ftpgroups 创建ftp用户, ...
- ubuntu上搭建vsftpd且通过mysql来管理FTP账号
参考文章:http://wiki.ubuntu.org.cn/Vsftpd%E5%92%8Cmysql%E9%85%8D%E7%BD%AE 请各位先按照这篇文章一步一步操作,我这里是记录一些其间遇到的 ...
- 【译文】用Spring Cloud和Docker搭建微服务平台
by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...
随机推荐
- MVC - forward 和 redirect 的区别
MVC - forward 和 redirect 的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服 ...
- 更换conda镜像源、pip镜像源
镜像源一般有两点特别需要注意,一个是Conda源,一个是Pip源: 更换Conda源,以更换清华Conda源为例: Anaconda 镜像使用帮助 Anaconda 是一个用于科学计算的 Python ...
- vue2和vue3生命周期的区别
概念 首先,我们了解一下"生命周期"这个词.通俗的来说,生命周期就是一个事务从出生到消失的过程.例如,一个人从出生到去世.在vue中,vue的生命周期是指,从创建vue对象到销毁v ...
- SAP Container Controls(容器)
BC_CONTROLS_TUTORIAL 效果 代码 REPORT bc_controls_tutorial. *------------------------------------------- ...
- SAP 动态选择屏幕实例
DATA:BEGIN OF gs_sel, werks TYPE marc-werks, "工厂 matnr TYPE mara-matnr, "物料 mtart TYPE mar ...
- 【python基础】第04回 变量常量
本章内容概要 1. python 语法注释 2. python 语法之变量常量 3. python 基本数据类型(整型(int),浮点型(float),字符串(str)) 本章内容详解 1. pyth ...
- Day03 HTML标记
文本标题 <h1>一级标题</h1> <h2>二级标题</h2> <h3>三级标题</h3> <h4>四级标题< ...
- 老掉牙的 synchronized 锁优化,一次给你讲清楚!
我们都知道 synchronized 关键字能实现线程安全,但是你知道这背后的原理是什么吗?今天我们就来讲一讲 synchronized 实现线程同步背后的原因,以及相关的锁优化策略吧. synchr ...
- STM32单片机最小系统
1.单片机最小系统的组成部分 STM32单片机最小系统由①主芯片,②上电复位电路,③时钟电路,④电源供电电路组成.同时一个基本完整的单片机功能还应包括下载电路和LED指示电路. 2.单片机主芯片 单片 ...
- 4-6 Mabatis 框架
Mabatis 框架 Ⅰ.关于Mabatis 对数据库中的数据进行访问的框架 数据库执行过程: 连接数据库-->准备好SQL-->发送SQL语句-->执行语句-->获取结果-- ...