道者编程

linux同步scp和rsync

我目前主要用两种方法
1:scp
scp,可以很方便的把本机的文件传到其他服务器上,也可以把其他服务器的文件传到本服务器上,下面举个列子
scp -rp /usr/local/www/app root@10.10.0.1:/usr/local/www/
  //参数-r表示传输目录,非目录不用-r
然后会提示输入密码,密码成功后,就会开始传输
这个是把本服务器上的app 文件夹全部传输到10.10.0.1这台服务器的www文件夹下,要传输到本机,发过来就行,
 
参数说明:
-1 强制scp 用协议1
-2 强制scp 用协议2
-4 强制scp用IPV4的网址
-6 强制scp用IPV6的网址
-B 选择批处理模式(防止输入密码)
-C 允许压缩。 标注-C到ssh(1)来允许压缩
-c cipher
选择cipher来加密数据传输。这个选项直接传递到ssh(1)
-F ssh_config
设定一个可变动的用户配置给ssh.这个选项直接会被传递到ssh(1)
-i identity_file
选择被RSA认证读取私有密码的文件。这个选项可以直接被传递到ssh(1)
-l limit
限制传输带宽,也就是速度 用Kbit/s的速度
-o ssh_option
可以把ssh_config中的配置格式传到ssh中。这种模式对于说明没有独立的scp文件中断符的scp很有帮助。关于选项的如下。而他们的值请参看ssh_config(5)
-P port
指定连接远程连接端口。注意这个选项需要写成大写的模式。因为-p已经早保留了次数和模式
-S program
指定一个加密程序。这个程序必须可读所有ssh(1)的选项。
-p 指定修改次数,连接次数,还有对于原文件的模式
-q 把进度参数关掉
-r 递归的复制整个文件夹
-S program
指定一个加密程序。这个程序必须可读所有ssh(1)的选项。

-V 冗余模式。 让 scp 和 ssh(1) 打印他们的排错信息, 这个在排错连接,认证,和配置中非常有用。

2:rsync

我推荐大家用这种,这种方法的好处我就不多说了,网上一大堆,下面讲下怎么用,其实没这么难,很简单
linux系统下一般都安装了,启用一下就可以了,
(1):编辑配置文件 
# sudo vi /etc/default/rsync #ubuntu 
# vi /etc/xinetd.d/rsync #centos

centos:把disable=yse 改为no

ubuntu:RSYNC_ENABLE=true #false改true

启动:
# sudo /etc/init.d/rsync start #ubuntu
# systemctl start rsync #ubuntu20
# /usr/bin/rsync --daemon #centos
测试:
# rsync -arHz --progress --delete root@10.10.0.1:/usr/local/www/data /usr/local/www/
 
然后会提示输入密码,OK!
上面是把10.10.0.0的data文件同步到本机的www下面,要是把本机同步过去,反过来写即可

rsync的参数,可以看帮助文档或者网上查找

 --progress 传输过程中显示进度
 --exclude 忽略目录、文件
 -a 归档(压缩)模式,表示以递归方式传输文件,并保持所有文件属性
 -r 对子目录以递归模式处理
 -H 保留硬链接
 -z 在传输过程中进行压缩
 --delete 如果发送方有删除的文件,接收方同步删除

--exclude,过滤忽略某些目录和文件,这里有个坑需要注意一下:

比如:/usr/local/a/ 传到 /usr/local/b,忽略掉a/logs,a/config/config.php,这里一定不能写绝对地址,要写相对地址,相对地址是相对发送方而言的,不是当前执行命令的相对地址。

正确写法:

rsync -arHz --progress --exclude "logs" --exclude "config/config.php" /usr/local/a/ /usr/local/b
前面两个排除的文件logs和config.php,其实是从第三个框框里面的目录拼接的。

--log-file='/usr/local/ssh/log/rsync.log' --log-file-format='%t %f %b' #也可以指定保存日志 

3:建立主机信任,scp rsync建立链接都需要输入密码,很不方便,我们下面处理一下,直接链接就行,不用输入密码

(1):

# vi /etc/ssh/sshd_config
 找到以下内容,并且去掉 #,否则不会在.ssh下生成文件

RSAAuthentication yes 
PubkeyAuthentication yes 
AuthorizedKeysFile .ssh/authorized_keys 

然后重启:

# /sbin/service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
 

(2):建立从A服务器到B服务器不用密码,在A服务器上执行ssh命令:
# ssh-keygen -t rsa 
 
按照提示选择yes,然后一直回车,最终会输出:
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: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.  //你的公钥保存在这个位置
The key fingerprint is:

34:85:92:a7:c1:b7:cb:67:6f:1f:3f:ba:7e:fa:ad:06 root@abcdefg


(3):把A服务器的/root/.ssh/id_rsa.pub 文件复制到B服务器


注意:以下都是在B服务器上进行:

(4):写入authorized_keys,我这里的scp和rsync链接都是链接对方的root用户,所以命令:


# cat id_rsa.pub >>/root/.ssh/authorized_keys //root
 

如果你链接的是其他用户,比如zhangsan,那么就是


cat id_rsa.pub >>/home/zhangsan/.ssh/authorized_keys //zhangsan


注意这里的.ssh文件夹,不是都有的,如果没有的话,需要建立一个
# mkdir .ssh
 
(5):centos5.5需要复制权限才可以,我们赋下权限
# chmod 600 .ssh/authorized_keys
# chmod 700.ssh
 
 
这样从A服务器访问B服务器就不用密码了,前提是访问B服务器的root用户,你如果要用其他B服务器上的用户,则还需要密码!

最新评论:
我要评论:

看不清楚