cp 是在本机进行拷贝不能跨服务器

scp 是secure copy的简写,用于在Linux下进行远程拷贝文件的命令, scp传输是加密的,可能会稍微影响一下速度,当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来,另 外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了,虽然 rsync比scp会快一点,但当小文件众多的情况 下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用

rsync 迁移单个没有太多小文件的数时比scp优秀,速度快

scp命令

rsync命令

rsync的参数说明

-v 详细输出

-z 传输时进行压缩以提高传输效率。

-a 归档模式,表示以递归的方式传输文件,并保持文件的属性

–exclude 排除不需要同步传输的文件或者目录

–delete 让目标目录和源目录的数据一致

–bwlimit 限制带宽,默认单位是:kb(案例:某DBA做数据同步,导致用户无法访问网站)

–info=progress2 给出了一个很好的整体进度百分比(局部值)

无密码通过ssh执行rsync

默认情况下,在执行rsync命令时通常需要我们输入密码。但有时我们并不希望如此,那么如何实现无密码执行rsync呢?

安装rsync

每一台需要同步(交互的主机都需要安装)

1
yum install rsync -y

需要密码

  1. 测试通过ssh可以执行rsync(需要密码)

    执行rsync,确保你帐户的密码在远程服务器上可以使用,并能够将文件复制到远程服务器。
    例:将原服务器文件/root/mm.sh同步到远程目录/usr/share/nginx/html(服务器地址:172.18.195.253) ,执行此操作时,服务器会要求你输入密码

    1
    rsync -avz --info=progress2 /root/mm.sh 172.18.195.253:/usr/share/nginx/html

免密

  1. 使用ssh-keygen生成密匙

    现在我们来配置ssh使得通过ssh执行rsync时不再索要密码。在原服务器上使用ssh-keygen生成公钥和秘钥。

    1
    2
    3
    4
    5
    6
    7
    8
    $ ssh-keygen
    Generating public/private rsa key pair.
    # 直接回车
    Enter file in which to save the key (/root/.ssh/id_rsa):
    # 直接回车
    Enter passphrase (empty for no passphrase):
    # 直接回车
    Enter same passphrase again:

    注意:当它要求您输入passphrase按下enter键,不需要给任何密码

  2. 使用ssh-copy-id将公匙拷贝至远程主机

    1
    2
    # ip 就是目标服务器地址
    ssh-copy-id -i ~/.ssh/id_rsa.pub 172.18.195.253

    注:执行以上操作时会要求你输入远程主机帐户和密码,然后就会自动将公钥拷贝至远程目录。

  3. 无需密码通过ssh来执行rsync

    现在,你可以不需要密码通过ssh连接到远程主机

    1
    ssh 172.18.195.253

    再次执行rsync,它将不再要求你输入密码

    1
    rsync -avz --info=progress2 /root/mm.sh 172.18.195.253:/usr/share/nginx/html