FTP、SFTP和SCP

在用阿里云的云虚拟主机的时候,可以使用现成的环境(centos6.5,Apache,mysql 5.1.73,php5.2~php5.5),不过也仅限于这个环境,因为这是云虚拟主机,你能操作的范围相当有限,不能使用自己想用的那些高版本的环境,对Linux的操作也基本没有,上传文件我使用的是FileZilla Client,主机和用户名使用的都是阿里云分配的,你只能用那个来登录。

上个月又买了个阿里云的ECS服务器(1M的带宽,64位的centos7.3,40G云盘,包年),后来环境什么的想要什么版本装什么版本,Linux命令天天在用,只是编译安装对我来说有点尴尬(100%的出错率),不过每次都能解决。刚开始,连接服务器我用的是Xshell,上传文件用Xftp,说实话,这套软件确实挺好用的,不过遗憾的是只有一个月的使用期,如果想继续用就得花钱买,官网上的价格是:Xshell是899元,Xftp是499元。因为不想花这个钱,所以我选择其他免费的能用的软件。

PuTTY虽然没有Xshell那样强大,配色也不对,不过还是能用的,而且比较小,最主要的还是免费,上传文件的话,我还是继续选择FileZilla Client,当我输入完IP,用户名和密码,敲下回车之后,却发现连不上,起初是怀疑我密码输错了,但是后来又重新试了好多次,还是连不上。最后想了一下,会不会是文件传输协议的原因,后来把登录地址一改,结果还真连上了。

上传文件到云虚拟主机时,使用的FTP主机地址和用户名是云虚拟主机管理控制台里面给的那个。而上传到云服务器ECS,主机地址的填写格式除了填写IP之外,还要在IP之前添加sftp://,比如这样:sftp://69.28.91.10。


下面是我找的一些相关信息:

FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。FTP是基于TCP协议的,因此iptables防火墙设置中只需要放开指定端口(21 + PASV端口范围)的TCP协议即可。

FTP工作模式:
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了一个1024+的随机端口,你过来连接我”。于是服务器从20端口向客户端的1024+随机端口发送连接请求,建立一条数据链路来传送数据。
PASV(Passive被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了一个1024+的随机端口,你过来连接我”。于是客户端向服务器的指定端口发送连接请求,建立一条数据链路来传送数据。
PORT方式,服务器会主动连接客户端的指定端口,那么如果客户端通过代理服务器链接到internet上的网络的话,服务器端可能会连接不到客户端本机指定的端口,或者被客户端、代理服务器防火墙阻塞了连接,导致连接失败。PASV方式,服务器端防火墙除了要放开21端口外,还要放开PASV配置指定的端口范围。

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

登陆远程主机:  
sftp user@host  
针对本机的命令都加上l:  
lcd,lpwd  
将本机文件上传到远程:  
put filename.txt [some/directory]  
将当前文件夹下的文件上传到远程:  
mput *.* // multiple  
下载远程文件到本地:  
get filename.file [some/directory]  
下载目录下所有远程文件到本地:  
mget *.* [some/directory]  
帮助:  
?  
退出:  
bye/exit/quit  

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

拷贝本地文件到远程:  
scp filename.txt user@host:some/directory  
拷贝本地文件到远程,使用指定端口:  
scp -P 2234 filename.txt user@host:some/directory  
拷贝多个文件到远程home:  
scp filename1.txt filename2.txt user@host:~  
拷贝远程文件到本地:  
scp user@host:directory/filename.txt  /directory  
拷贝远程文件夹到本地:  
scp -r user@host:directory/folder  .  
拷贝远程文件到远程:  
scp user@host1:directory/filename.txt  user@host1:directory  

比较:
FTP 基于TCP来传输文件,明文传输用户信息和数据。
SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。
SCP 是基于SSH来加密拷贝文件,但要知道详细目录,不可断点续传。

Last modification:December 17th, 2018 at 01:40 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment