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 |
需要密码
测试通过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
免密
使用
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键,不需要给任何密码
使用
ssh-copy-id
将公匙拷贝至远程主机1
2# ip 就是目标服务器地址
ssh-copy-id -i ~/.ssh/id_rsa.pub 172.18.195.253注:执行以上操作时会要求你输入远程主机帐户和密码,然后就会自动将公钥拷贝至远程目录。
无需密码通过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