网络通讯协议:文件传输协议 Ftp 工作模式 工作原理 java实现 服务器安装

概念

ftp服务器是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器

任何一台电脑,安装了vsftpd都可以 对外提供ftp服务:

 

ftp协议的实现

客户端

windows : FileZillaFlashfxp、CuteFTP

linux端 :  ftp,lftp,lftpget,wget,curl

服务端

windows;   SerU,FileZilla-Server.

Linux :vsftpd  和 pure-FTPD ,ProFTPD,wuftpd 实现了实现了ftp协议服务器的功能

vsftpd  和 pure-FTPD的区别:

        pure-FTPD 和 VSFTPD 都是很优秀的的FTP建站软件,其区别主要在于两者的可扩展性

  VSFTPD 体积小巧,配置比较简单,安全和性能比较出众,但在数据库支持和扩展性方面不佳。

  pure-ftpd 是一款功能强大、性能稳定、安全可靠、使用简单等优点,并能够进行web管理的ftp server软件;
  如果对用户量和数据量要求不是很高的话,vsftp已经是很好的ftp server;
  pure-ftpd 的配置文件,相对简单,支持多种数据库,还可以对每用户独立的上传
  下载流量进行限制,对IP地址进行限制、对用户目录文件数及大小单独限制等。
  它与 LDAP、TLS、PostgreSQL、MySQL等工具结合,可实现更多扩展应用,表现出强大的功能。

  比如,Pure-FTPD 与数据库结合后,可以实现如下功能:

  用php编写前台页面管理用户,让用户自己修改密码。这个可以应用于虚拟主机管理界面中;
  将用户数据与论坛或网站的用户数据表整合,可以在论坛或网站中实现 FTP 功能;
  将用户数据与邮件服务的用户数据表整合,可以实现邮件系统中的网盘功能;
  诸如此类应用,等等。

  因此可以根据自己需要来自行选择软件;
  配置用户少安全性高的服务器可以选用 VSFTPD
  配置功能复杂的服务器就可以选用 Pure-FTPD

 

vsftpd服务器安装与配置:

1 安装软件

  •  sudo yum install vsftpd     
  •  sudo service vsftpd start

2 查看端口是否启用

3 查看配置文件是否OK

/etc/vsftpd/vsftpd.conf

listen=NO
设置为YES时vsftpd以独立运行方式启动,设置为NO时以xinetd方式启动(xinetd是管理守护进程的,将服务集中管理,可以减少大量服务的资源消耗)

listen_ipv6=YES
以上两个只能一个YES一个NO否则会出错
listen_port=port
设置控制连接的监听端口号,默认为21

listen_address=ip_address
将在绑定到指定IP地址运行,适合多网卡
connect_from_port_20=YES/NO
若为YES,则强迫FTP-DATA的数据传送使用port 20,默认YES
anonymous_enable=YES
允许匿名登陆
anon_root=/home/ftp
匿名登陆进去后的默认目录,这个自己设置
no_anon_password=YES
匿名登陆不需要密码
anon_upload_enable=YES
匿名用户是否能够上传文件,这个YES表示允许,并且它的父目录要有可写权限
anon_mkdir_write_enable=YES
允许匿名用户创建目录
anon_other_write_enable=NO
不允许匿名用户具有建立目录,上传之外的权限
anon_max_rate=n
设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制
write_enable=YES
登陆用户是否有写权限,全局设置

local_enable=YES
是否允许本地用户登陆

local_root=/../..
本地登陆后的默认目录
控制用户访问文件vsftpd.user_list(文件中一行一个用户名)
在/etc/下面,没有就自己新建一个
userlist_file=/../..
上面那个文件的路径
userlist_enable=YES
是否启动vsftpd.user_list这个文件
userlist_deny=YES/NO
当为YES的时候,在vsftpd.user_list中的用户名不能登陆FTP
当为NO的时候,只有vsftpd.user_list中的用户名能登陆FTP
idle_session_timeout=300
设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒
accept_timeout=60
建立FTP连接超时时间,单位秒

connection_timeout=60
PORT方式下建立FTP数据连接超时时间,单位秒

data_connection_timeout=60
设置空闲的用户会话在N秒后中断,单位秒

xferlog_enable=YES
开启日志记录
xferlog_file=/var/log/vsftpd.log
设置日志文件路径

pasv_enable=YES/NO
是否开启被动模式进行数据传输,有的客户机在防火墙后面,所以建议开启
pasv_min_port=n
pasv_max_port=m
设置被动模式后的数据连接端口范围在n和m之间
max_clients=n
在独立启动时限制服务器的连接数,0表示无限制


修改完配置文件后一定要重启服务
sudo /etc/init.d/vsftpd restart

 


FTP添加用户
useradd函数,用于添加ftp用户
参数:
-d 指定用户根目录
-s 指定shell脚本为/bin/bash
-g 创建分组ftp分组
-G 指定root分组
例如:
useradd -d /home/linux/myftp -s /bin/bash ftpuser
详细信息输入useradd -h查看
删除ftp用户和主目录 userdel -r youruser
详细信息输入userdel -h查看
设置ftp用户密码
passwd ftpuser
输入命令后会让你输密码的
如果ftpuser是已存在的用户,则为修改旧密码

 

4 查看防火墙是否阻止了默认端口

 如果阻止了,则sudo iptables -A INPUT -p TCP --dport 21 -j ACCEPT

然后重新启动防火墙 sudo service iptables status

 

 

5 浏览器 输入 ftp://ip:21 就可以访问了。

 

 

Ftp客户端常用命令

1 登录FTP服务器
方法一:直接输入ftp加ip地址ftp 192.168.10.xxx
方法二:直接输入ftp,进入ftp服务后输入open加ip地址open 192.168.10.xxx
当连接成功后会让你进行身份验证,在输入密码时屏幕上没有任何显示,不用管,直接输完密码敲回车键即可。

2. 查看FTP服务器上的文件
(一般情况下用户都会被限制目录的访问权限,只可在当前目录下进行操作)
dir:显示服务器目录和文件列表
ls:显示服务器简易的文件列表
cd:进入服务器指定的目录

dir命令可以使用通配符“”和“?”,比如,显示当前目录中所有扩展名为jpg的文件,可使用命令 dir .jpg。

cd命令中必须带目录名。比如 cd main 表示进入当前目录下的main子目录

3. 下载文件
上传和下载文件时应该使用正确的传输类型,FTP的传输类型分为ASCII码方式和二进制方式两种,对.txt、.htm等文件应采用ASCII码方式传输,对.exe或图片、视频、音频等文件应采用二进制方式传输。在默认情况下,FTP为ASCII码传输方式。
type:查看当前的传输方式
ascii:设定传输方式为ASCII码方式
binary:设定传输方式为二进制方式
(以上命令都不带参数)
get:下载指定文件get filename [newname](filename为下载的FTP服务器上的文件名,newname为保存在本都计算机上时使用的名字,如果不指定newname,文件将以原名保存。

get命令下载的文件将保存在本地计算机的工作目录下。该目录是启动FTP时在盘符C:后显示的目录。如果想修改本地计算机的工作目录,可以使用 lcd 命令。比如:lcd d:\ 表示将工作目录设定为D盘的根目录。

mget:下载多个文件mget filename [filename ....](mget命令支持通配符“”和“?”,比如:mget .mp3 表示下载FTP服务器当前目录下的所有扩展名为mp3的文件。)

4. 上传文件
put:上传指定文件put filename [newname]
send:上传指定文件send filename [newname]
(filename为上传的本地文件名,newname为上传至FTP服务器上时使用的名字,如果不指定newname,文件将以原名上传。)

上传文件前,应该根据文件的类型设置传输方式,本机的工作目录也应该设置为上传文件所在的目录。

这里的send和put方法用法都基本相同,但是上传速度send却要比put快很多,有兴趣的人可以去研究下。
5. 结束并退出FTP
close:结束与服务器的FTP会话
quit:结束与服务器的FTP会话并退出FTP环境
6. 其它FTP命令
pwd:查看FTP服务器上的当前工作目录
rename filename newfilename:重命名FTP服务器上的文件
deletefilename:删除FTP服务器上的文件
help[cmd]:显示FTP命令的帮助信息,cmd是命令名,如果不带参数,则显示所有FTP命令
 

 

FTP协议工作原理

FTP有两个过程一个是控制连接,一个是数据传输。FTP协议像HTTP协议一样需要一个端口作为连接(默认时HTTP端口是80,FTP端口是21: 用于发送指令给服务器以及等待服务器响应)。但是此外FTP协议还需要另外一个端口:用于数据传输端口,端口号为20(仅用PORT模式),是用建立数据传输通道的,主要作用是从客户向服务器发送一个文件,服务器向客户发送一个文件,从服务器向客户发送文件或目录列表。

 

FTP协议的传输模式

FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet, 你可以用ftp命令来传输文件。每种操作系统使用上又有一些细微差别,但是每种协议基本的命令结构是相同的。

FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

ASCII传输方式假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

二进制传输模式在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,mac以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。

FTP协议的工作模式

FTP是仅基于TCP的服务,不支持UDP。与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP 工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。主要有两种工作模式:

主动FTP

即Port模式,客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
  针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:
  1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
  2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
  3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
  4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)

被动FTP

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
  在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
  当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
  对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
  1. 从任何大于1024的端口到服务器的21端口 (客户端初始化的连接)
  2. 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)
  3. 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)
  4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应数据到客户端的数据端口)

 

 

被动FTP模式抓包分析

通过ftp到ftp.ksu.edu.tw这个FTP服务器,我们抓一下包,下面是登录过程。

第一步:客户端发起命令通道的三次握手。



第二步:客户端发起PASV的连接请求。

第三步:服务器端启动数据端口,并告知客户端该端口号。

第四步:客户端发起数据通道的三次握手。

 

使用总结

主动和被动模型 是指服务器主动还是被动连接客户端

在主动模式下:FTP服务器的控制端口是21,数据端口是20,所以在做静态映射的时候只需要开放21端口即可,他会用20端口和客户端主动的发起连接。

在被动模式下:FTP服务器的控制端口是21,数据端口是随机的,且是客户端去连接对应的数据端口,所以在做静态的映射话只开放21端口是不可以的。此时需要做DMZ。 


   一般来说,如果这个FTP服务器只对企业的内部局域网客户提供文件传输的服务,那么基本上两者的应用效果没有很大的差异。但是如果企业网络外部的用户也 需要通过互联网与FTP服务器进行文件传输的话,就会有很大的不同。这主要是因为,在数据通道建立的过程中,客户端会在另一个端口上监听等待连接,并利用 命令连接通道告诉服务器其监听的端口好。然后企业的边界路由器会将FTP的IP地址转换为合法的公网IP地址(假设企业由于公网IP地址有限,在边界路由 器上通过NAT服务向外部用户提供FTP连接)。如果此时采用的是自动操作模式的话,则在连接这个数据通道的过程中FTP服务器会主动跟边界路由器的端口 进行通信(因为FTP服务器认为这台边界路由器,其实就是NAT服务器,就是FTP客户段)。但是实际上不是,而且也有可能没有启用这个端口。为此客户端 与FTP服务器之间的连接最终没有建立起来。所以说,如果采用主动操作模式的话,当FTP服务器部署在NAT等服务器后面的时候,则FTP服务器与客户端 之间只能够建立命令连接通道,而无法建立起数据传输通道。如果FTP服务器与客户端之间还有防火墙的话,在连接的过程中也会出现以上类似的情况。 


   而如果是采用被动操作模式的话,是客户端主动跟服务期的20号端口进行连接的。为此在数据传输通道建立的过程中,即使中间有NAT服务器或者防火墙,也 会准确无误的连接到FTP服务器的数据传输接口。所以说,如果在客户端与FTP服务器之间存在防火墙或者NAT服务器等类似设备的话,那么在FTP服务器 部署的时候,最好采用被动操作模式。否则的话,很可能只能够建立命令连接通道,而无法进行数据传输。 
在 FTP服务器部署的时候,其默认采用的是主动操作模式。如果企业FTP服务器的用户都是在内部网络中的,即不用像外部网络的用户提供FTP连接的需求,那 么采用这个默认操作方式就可以了。但是如果一些出差在外的员工或者员工在家庭办公时也需要访问企业内部的FTP服务器,而此时出于安全的考虑或者公网IP 地址数量的限制,企业往往会把FTP服务器部署在防火墙或者NAT服务器的后面,此时这个主动操作模式就不行了。如果企业中通过互联网来访问企业内部 FTP服务器的员工比较多的时候,那么最好能够一劳永逸的解决这个问题,即在FTP服务器上进行设置,强制客户端在连接的时候采用被动操作模式。相反如果 用户比较少的话,而且用户又具有一定的计算机知识,那么可以不在服务器上进行设置。而是在连接的过程中,通过FTP客户端来设置。如在某些FTP客户端 上,会有一个Passive Transfers等类似的选项。选中这个选项就表示以被动操作方式进行传输。而没有选中这个选项的客户端则仍然采用主动操作模式来进行连接。

 
  总 之,在FTP服务器部署的时候考虑是要采用主动操作模式还是被动操作模式,只需要记住一个原则,即如果把FTP服务器部署在防火墙或者NAT服务器的背 后,则采用主动操作模式的客户端只能够建立命令连接而无法进行文件传输。如果部署完FTP服务器后,系统管理员发现用户可以连接上FTP服务器,可以查看 目录下的文件,但是却无法下载或者上传文件,如果排除权限方面的限制外,那么很有可能就是这个操作模式选择错误。系统管理员告诉用户选择合适的操作模式, 基本上就可以解决文件传输的问题了。 

 

为什么被动模式 端口不用20 ,而是用其他的呢?

20端口作为主动模式的数据连接端口,这个是规定好的,只要发现是20端口,就可以确认服务器是主动模式连接的。

被动模式如果占用了20 端口,就无法明显的确认是 主动连接还是被动连接了

 

为什么ftp协议要用2个连接?

1 一般场景下,用户在上传或者下载文件的时候,可能希望查看目录下的其他文件列表,或者切换目录,这个时候数据连接被占用着,无法传递命令,为了解决这种问题,所以命令连接和数据传输连接分离成了2个。

2 命令连接和数据连接分开 ,传输完文件之后,通过关闭数据连接可以知道文件传输结束了。

3 命令连接是长连接,数据连接是短连接,命令连接和http连接不同,不需要每次传递用户认证信息,是有状态的。服务端会维护连接和用户以及操作目录的一个对应关系,而http是短连接,每次都需要传递用户信息到服务器认证然后才可以进行其他操作。

ftp协议是基于tcp的,ftp实现 也支持短连接和长连接。

ftp 数据传输完毕后,数据连接关闭,但是命令连接不关闭,命令连接默认设计成了长连接,只有用户输入命令quit的时候 ,才会告诉tcp 客户端发起了关闭请求。如果数据连接关闭后,用户又发起了PASSIVE 命令,则可以重新建立数据连接。

 

 

其他文件传输协议:

  •   sftp(Secure File Transfer Protocol):

安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。 

修改 sshd_config 配置

vim /etc/ssh/sshd_config

#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp

# 下面两项是与安全有关
AllowTcpForwarding no
X11Forwarding no
  • Match Group sftp 这一行是指定以下的子行配置是匹配 sftp 用户组的。Match user userA,userB 则是匹配用户。
  • ChrootDirectory /data/sftp/%u 设定属于用户组 sftp 的用户访问的根文件夹。%h 代表用户 home 目录,%u 代表用户名。
  • ForceCommand internal-sftp 该行强制执行内部 sftp,并忽略任何 ~/.ssh/rc 文件中的命令。
  • AllowTcpForwarding no 是否允许 TCP 转发,默认值为 "yes", 禁止 TCP 转发并不能增强安全性,除非禁止了用户对 shell 的访问,因为用户可以安装他们自己的转发器。
  • X11Forwarding no 是否允许进行 X11 转发。默认值是 "no",设为 "yes" 表示允许。如果允许 X11 转发并且 sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用 X11 转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止 X11 转发并不能禁止用户转发 X11 通信,因为用户可以安装他们自己的转发器。

配置完成后重启配置systemctl restart sshd

sftp user@ip 

参考 https://www.cnblogs.com/binarylei/p/9201975.html

 

  •  ftps (ftp over ssl ):

 即ftp借助ssl协议加密传输,不但要用ftp服务器还要用ssl协议加密。

(如果是ftp-over-ssh,就是完全不同于sftp的传输方式了,就是利用ftp服务器和ssh协议加密传输数据。 )

 

备注: ftps 和sftp 区别 ? 都是为ftp连接加密,协议非常相似。一个是借助ssl协议加密,一个是借助ssh加密。ssl是为http/smtp等加密设计的,ssh是为telnet/ftp等加密、建立传输通道而设计的。

sftp协议是ssh中的一条独立的协议,利用sftp服务器就可以传输数据。

而ftps是ftp-over-ssl的意思,即ftp借助ssl协议加密传输,不但要用ftp服务器还要用ssl协议加密。(如果是ftp-over-ssh,就是完全不同于sftp的传输方式了,就是利用ftp服务器和ssh协议加密传输数据。 )

ftps 协议实现的Linux客户端有curl、lftp、wget(版本1.16以上)

 

  • TFTP

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务端口号为69。

它基于UDP协议而实现

此协议设计的时候是进行小文件传输的,因此它不具备通常的FTP的许多功能

它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件

 

  • FXP 

FXP(File Exchange Protocol,文件交换协议)说简单点就是一个FTP客户端控制两个FTP服务器,在两个FTP服务器之间传送文件。FXP,可以认为FXP本身其实就是FTP的一个子集,因为FXP方式实际上就是利用了FTP服务器的Proxy命令,不过它的前提条件是FTP服务器要支持PASV,且支持FXP方式。

成功FXP有两个必要条件:①两个FTP服务器均支持FXP;②两个FTP服务器均支持PASV方式。但并不是说满足这两个条件的FTP服务器均经本地操作成功FXP,这还与本地与FTP服务器的网络状况有关。故有时会出现同样两个FTP,别人可以FXP,而你不可以的情况。

 

其他文件传输实现方式  SMB  NFS

不同的文件传输方式考虑的重点不同

1  是否可以跨平台

2  是否可以挂载到服务器作为一个文件系统。

 

FTP(File Transfer Protocol,文件传输协议),应用层协议,可跨平台。如其名,只能实现文件传输功能,不能实现一些其他的功能,例如文件系统挂载等功能。

NFS(Network File System,网路文件系统),工作在内核模式下的故难以实现跨平台。由于基于文件系统实现,在linux下可实现挂载使用等功能

SMB(Service Message Block,服务消息块协议),能够实现Windows和Linux主机之间的文件共享服务,可实现跨平台

在Linux上实现了CIFS(Common Internet File System)协议。

 

 

其他文件传输命令:

  • wget (实现了ftps协议)

wget 是一个经由 GPL 许可的可从网络上自动获取文件的自由软件包。它是一个非交互式的命令行工具。支持 HTTP,HTTPS 和 FTP 协议,支持代理服务器以及断点续传功能。 wget 可实现递归下载,即可跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,实现远程网站的镜像。在递归下载时,wget 将页面中的超级链接转换成指向本地文件,方便离线浏览。由于非交互特性,wget 支持后台运行,用户在退出系统后,仍可继续运行。功能强大,设置方便简单。

  • curl:(实现了ftps协议)

另一个可以用来进行文件传输的工具是 curl,它是对 libcurl 库的一个命令行工具包装。 libcurl 库中提供了相应功能的 API,可以在程序中调用。对于 libcurl 库的使用方法介绍超出了本文的讨论范围。 curl 使用 URL 的语法来传输文件,它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多种协议。 curl 功能强大,它提供了包括代理支持,用户认证,FTP 上载,HTTP post,SSL 连接,文件续传等许多特性

  • lftp:实现了ftps协议)

lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp的界面非常想一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。

lftp命令是一款优秀的文件客户端程序,它支持ftp、SETP、HTTP和FTPs等多种文件传输协议。lftp支持tab自动补全,记不得命令双击tab键,就可以看到可能的选项了。

lftp(选项)(参数)

  •  rcp

rcp 意为“ remote file copy ”(远程文件拷贝)。该命令用于计算机之间进行文件拷贝。其有两种格式。第一种格式用于文件到文件的拷贝;第二种格式用于把文件或目录拷贝到另一个目录中,不如scp 安全,推荐使用scp

  • SCP(Secure Copy) :实现了ssh 协议

scp就是secure copy,是用来进行远程文件复制的,并且整个复制过程是加密的。数据传输使用ssh,并且和使用和ssh相同的认证方式,提供相同的安全保证。 

scp 源 目的

示例:scp -r developer@101.201.143.59:/data/logs/movikr-svc-user ~/Desktop/    密码:Mapo

scp -r developer@172.16.30.53:/mnt/shared/forserver/finance/tickets/20160510  ~/Desktop/

scp  命令安装 yum install -y openssh-clients   它属于openssh的clients包。

 

  • rsync:       实现了ssh 协议

rsync 是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件,其具有如下特性:

  • 支持链接、所有者、组信息以及权限信息的拷贝;
  • 通过远程 shell(ssh, rsh)进行传输;
  • 无须特殊权限即可安装使用;
  • 流水线式文件传输模式,文件传输效率高;
  • 支持匿名操作;

   详情参考 https://blog.csdn.net/xiaoliuliu2050/article/details/103718311

 

通过上述的对比不难发现,每种文件传输方法基于其自身的特点与优势均有其典型的适用场景:

  • ftp 作为最常用的入门式的文件传输方法,使用简单,易于理解,并且可以实现脚本自动化;
  • rcp 相对于 ftp 可以保留文件属性并可递归的拷贝子目录
  • scp 利用 ssh 传输数据,并使用与 ssh 相同的认证模式,相对于 rcp 提供更强的安全保障
  • wget,实现递归下载,可跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,适合实现远程网站的镜像;
  • curl 则适合用来进行自动的文件传输或操作序列,是一个很好的模拟用户在网页浏览器上的行为的工具;
  • rsync 更适用于大数据量的每日同步(增量),拷贝的速度很快,相对 wget 来说速度快且安全高效。

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值