You need to enable JavaScript to run this app.
导航
类Unix/Linux间 传输文件(SCP/Rsync/Netcat)
最近更新时间:2024.08.14 15:28:33首次发布时间:2022.04.27 21:04:01

本文为您介绍如何在类Unix、Linux操作系统的云服务器间传输数据。

传输文件数据的主要工具有SCP、Rsync、Netcat等,下文将详细介绍各工具的特点以及用法。

SCP

SCP( Secure Copy)即安全拷贝,是一种在两台服务器(本地与本地、本地与远程、远程与远程)间安全地进行文件传输的方法。SCP是基于SSH登录的应用,所以进行数据传输的机器上必须支持SSH服务。

使用示例

场景命令示例

两台Linux服务器间传输文件

scp <源主机用户名>@<源主机IP>:<待传输文件地址> <目的主机用户名>@<目的主机IP>:<接收文件地址>

将IP为192.168.1.104的云服务器文件传输到IP为192.168.1.105的云服务器/home/目录下,命令如下:
scp root@192.168.1.104:/test.txt root@192.168.1.105:/home/

从本地上传文件到远程服务器

scp <本地文件地址> <远程服务器用户名>@<远程服务器公网IP>:<远程服务器文件地址>

将本地文件 /home/test.txt 上传至公网IP地址为10.x.x.x的云服务器对应目录下,命令如下:
scp /home/test.txt root@10.x.x.x:/home/

从远程服务器下载文件到本地主机

scp <远程服务器用户名>@<远程服务器公网IP>:<远程服务器文件地址> <本地文件存储地址>

将公网IP地址为10.x.x.x的云服务器文件 /home/test.txt 下载至本地 /home/目录下,命令如下:
scp root@10.x.x.x:/home/test.txt /home/

如需了解更多scp命令语法,可执行man scp获取相关信息。

Rsync

Rsync(remote synchronize)是Linux/类Unix系统下的数据镜像备份工具。可以远程同步,支持本地复制,或者与其他SSH、Rsync主机同步,文件传输速率高。

Rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度较快。

参数说明

Rsync常见参数说明如下:

参数说明
-v显示详细信息。
-q忽略非error的输出。
-a归档(压缩)模式,表示以递归方式传输文件,并保持所有文件属性等同于-rlptgoD(无 -H,-A,-X)。
-r对子目录以递归模式处理。
-l不处理符号链接保(留符号链接)。
-p保持权限。
-t保持修改时间。
-g保持组信息。
-o保持文件所有者信息。
-D保持设备文件信息。
-H保留硬链结。
-S对稀疏文件进行特殊处理以节省空间。
-z在传输过程中进行压缩。

安装说明

本节以CentOS 7.9操作系统为例,介绍Rsync相关安装、配置说明。

步骤一:安装Rsync

  1. 执行rsync --version命令,检查是否已经安装Rsync。
    返回版本信息,即为已安装rsync。
  2. 如未安装Rsync,可根据操作系统,执行对应命令安装。
    • CentOS/Fedora:yum install rsync
    • Debian/Ubuntu/veLinux:sudo apt-get install rsync
    • OpenSUSE:zypper in rsync

步骤二:Rsync服务配置(可选)

使用Rsync服务在两台服务器间进行Rsync传输时,需在Server端和Client端进行如下预配置。

说明

如通过SSH传输文件,无需进行Rsync服务预配置,您可跳过此步骤。

Server端配置
  1. 登录Server端服务器。
  2. 修改/etc/rsyncd.conf文件。
    1. 执行vim /etc/rsyncd.conf打开文件,按i进入编辑模式,在文件末尾添加如下内容:
      uid = root
      gid = root
      use chroot = no
      max connections = 4
      exclude = lost+found/
      transfer logging = yes
      timeout = 900
      ignore nonreadable = yes
      dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb .bz2
      [test]               #自定义模块名称
      path=/home/test/     #指定存储文件的路径
      comment=test
      ignore errors
      read only=no         #设置为no,客户端可以上传文件,yes表示只读
      write only=no        #no表示可在客户端下载,yes表示不能在客户端下载
      list=no              #客户请求时,使用模块列表
      auth user=root       #指定传输时要使用的用户名
      
    2. Esc退出编辑模式,然后输入:wq并回车。
  3. 新建/etc/rsyncd.passwd文件。
    1. 执行vim /etc/rsyncd.passwd命令,新建文件。
    2. i进入编辑模式,添加传输时要使用的用户名及登录密码:<auth user>:<password>
    3. Esc退出编辑模式,然后输入:wq并回车。
  4. 执行chmod 600 /etc/rsyncd.passwd命令,开启读写权限。
  5. 执行systemctl start rsyncd命令,开启服务。
Client端配置
  1. 登录Client端服务器。
  2. 新建/etc/rsyncd.passwd文件。
    1. 执行vim /etc/rsyncd.passwd命令,新建文件。
    2. i进入编辑模式,添加server端auth user密码:<password>
    3. Esc退出编辑模式,然后输入:wq并回车。
  3. 执行chmod 600 /etc/rsyncd.passwd命令,开启读写权限。

使用示例

场景命令示例
拷贝本地文件rsync -avSH <源文件地址> <目的地址>将/home目录下的test.txt文件拷贝到/tmp目录下,命令如下:
rsync -avSH /home/test.txt /tmp/
拷贝本地机器的内容到远程机器(使用shell程序,如SSH)rsync -av <本地文件地址> <远程机器IP>:<远程机器文件存储地址>将本地机器/home目录下的test.txt文件拷贝到IP为192.168.2.65的远程机器/tmp目录下,命令如下:
rsync -av /home/test.txt 192.168.2.65:/tmp/
拷贝远程机器的内容到本地机器(使用shell程序,如SSH)rsync -av <远程机器IP>:<远程机器文件地址> <本地机器文件存储地址>例如:将IP为192.168.2.65的远程机器/tmp目录下的test.txt文件拷贝到本地机器/home目录下,命令如下:
rsync -av 192.168.2.65:/tmp/test.txt /home/
拷贝本地机器的文件到远程Rsync服务器中(Rsync传输)rsync -av <本地文件地址> <auth user>@<远程服务器IP>::<模块名>将本地test.txt文件上传到IP为192.168.2.65的远程机器test模块下,命令如下:
rsync -av /root/test.txt root@192.168.2.65::test
拷贝远程Rsync服务器的文件到本地机器(Rsync传输)rsync -av <auth user>@<远程服务器IP>::<模块名> <本地文件存储地址>将IP为192.168.2.65的远程机器test模块下的文件拷贝到本地机器/home目录下,命令如下:
rsync -av root@192.168.2.65::test /home/
显示远程机器的文件列表(Rsync传输)rsync -v rsync://<远程服务器IP>/<模块名>显示IP为192.168.2.65的远程机器的文件列表,命令如下:
rsync -v rsync://192.168.2.65/test

Netcat

Netcat(简称NC)被称为网络工具中的“瑞士军刀”,体积小巧,但功能强大。通过建立TCP连接可以很方便的在两台主机间传输文件。

参数说明

Netcat常见参数说明如下:

参数说明
-g<网关>设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目>设置来源路由指向器,其数值为4的倍数。
-h在线帮助。
-i<延迟秒数>设置时间间隔,以传送信息及扫描通信端口。
-l使用监听模式,管控传入的资料,需与-p选项同时使用。
-n直接使用IP地址,而不通过域名服务器。
-p<通信端口>设置本地主机使用的通信端口。
-r指定本地与远端主机的通信端口。
-s<来源位址>设置本地主机送出数据包的IP地址。
-u使用UDP传输协议。
-v显示指令执行过程。
-w<超时秒数>设置等待连线的时间。
-z使用0输入/输出模式,只在扫描通信端口时使用。

安装说明

  1. 执行nc --version命令,检查是否已经安装Netcat。
    返回版本信息,即为已安装。
  2. 如未安装Netcat,执行如下命令安装。
    wget https://sourceforge.NET/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
    tar zxvf netcat-0.7.1.tar.gz
    cd netcat-0.7.1
    ./configure
    make
    make install
    

使用示例

场景命令示例
扫描端口nc -v -w 2 <待扫描机器IP> -z <端口范围> 扫描IP为192.168.2.253的远程服务器20~30端口,命令如下:
nc -v -w 2 192.168.2.253 -z 20-30

传输文件

  • 接收端开启监听:nc -l -p <监听端口> > <输出文件>

  • 发送端发送文件:nc <接收端IP> < <待传输文件>

从IP为192.168.2.65的机器拷贝test.txt文件到IP为192.168.2.253机器上,命令如下:

  • 接收端(192.168.2.253):nc -l -p 1234 > test.txt
  • 发送端(192.168.2.65):nc 192.168.2.253 1234 < test.txt