前言
在不同的主机间互相备份数据或者迁移数据应该是很屡见不鲜的事情,比如某些情况下目标机上可能已经安装了Nginx或者类似的web server,您可以直接将要传输的文件放到web server目录下,然后在主机上执行如下命令即可。wget https://www.vpser.net/testfile.zip
但若目标机上没有安装web server,那可能就要用到一些文件传输相关的协议或命令了。
文件传输协议与命令
FTP协议
FTP(File Transfer Protocol)
:最早使用的两主机间传送文件的协议,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+的随机端口,你过来连接我”,于是客户端向服务器的指定端口发送连接请求,建立一条数据链路来传送数据。PASV方式,服务器端防火墙除了要放开21端口外,还要放开PASV配置指定的端口范围。
FTP 不受操作系统的限制,但毕竟是早期文件传输协议,存在很多的令人诟病缺点,不建议使用。
SFTP协议
SFTP(secure file transfer protocol)
:安全文件传输协议,SFTP作为SSH的一部分,同样是使用加密传输认证信息和传输数据的方式。现有的SSH软件包中,一般都会包含SFTP(Secure File Transfer Protocol)的安全文件传输子系统。
关于SSH的相关原理介绍,可以参见了解SSH原理与运用
scp命令
SCP(secure copy)命令
:基于ssh登陆进行安全的远程文件拷贝命令,整个复制过程加密,使用和ssh相同的认证方式。
scp命令使用方法
scp [可选参数] file_source file_target
可选参数:
1 | -1: 强制scp命令使用协议ssh1 |
以下使用示例,转载自VPS侦探
获取远程服务器上的文件
$ scp -P 2222 -p root@www.vpser.net:/root/lnmp0.4.tar.gz /home/lnmp0.4.tar.gz
获取远程服务器上的目录
$ scp -P 2222 -r root@www.vpser.net:/root/lnmp0.4/ /home/lnmp0.4/
将本地文件上传到服务器上
$ scp -P 2222 /home/lnmp0.4.tar.gz root@www.vpser.net:/root/lnmp0.4.tar.gz
将本地目录上传到服务器上
$ scp -P 2222 -r /home/lnmp0.4/ root@www.vpser.net:/root/lnmp0.4