两台主从机之间的自动登录
在主机一中使用ssh-keygen产生公钥id.rsa.pub和私钥id.rsa
然后把公钥内容复制到主机2的.ssh/id.rsa.pub中(若没有就创建该目录)
注意,主机2中的防火墙要关闭,getenforce获得防火墙状态 (enforce permissive disabled)
setenforce 0 (临时关闭防火墙)
要想永远关闭需要到配置文件中/etc/selinux/config 中设置重启后才会生效
修改文件夹/root/.ssh的权限:
(本地机和远程机都要修改)
chmod 700 /root/.ssh
修改文件的属性:
chmod 600 /root/.ssh/authorized_keys
将公钥复制到ip地址为192.168.163.101的远程机上:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.2.150 (这条命令比scp有效多了,可以在远程主机上没有authorized_keys的情况下,直接运行,然后自动会在远程主机上创建/root/.ssh/authorized_keys)
注意主从登陆关系
ssh-keygen是用于在主机上产生秘钥的,然后把其中的公钥通过ssh-copy-id 传给远程从机
这样只能实现,在主机上远程登录从机,不能从机登陆主机。
远程登录形式:ssh root@192.168.1.1
远程执行命令:ssh root@192.168.1.1 "ls"
远程执行多条命令 ssh root@192.168.1.1 "ls ;id;w"
scp (-r 拷贝目录) 目标ip:目录地址
例如
scp dai 192.168.1.1:/root/
scp -r dai/ 192.168.1.1:/root/
rsync实现增量备份(拷新不拷旧,大大节省了拷贝时间),就算改了文件的属性,也算改动了,也算新文件
rsync 可以实现 本地-远程
远程-本地
本地-本地
例如
rsync -av /dir 192.168.1.1:/root/
rsync -av 192.168.1.1:/dir /dir
rsync -av /dir /dir2
三种类型的同步
-a == -rlptgoD以递归的方式进行归档,保持文件的属性
-r针对目录的拷贝
-v打印一些信息
-l 保留软链接(但是如果目标机器没有链接文件也是无效的)
-L把软链接的原文件拷贝到对方,名字是源软链接的名字(常用在跨服务器上,或者是远程备份)
-p保持文件的权限
-o 保持所属主
-g保持所属组
-D表示设备文件信息
-t保持时间信息
--delete同步的时候会删除目标文件中源没有的内容
--exclude=*.txt可以跟一些正则表达式,过滤不想拷贝的内容
--progress== -P统计同步速度或者数量
-u(相当于update)避免覆盖目标文件中新的文件。
rsync服务器的搭建:
首先要建立一个/etc/rsyncd.conf的配置文件
配置文件中的内容
port=873 #服务开启的端口
log file=/var/log/rsync.log#日志文件
pid file=/var/log/rsync.pid# pid日志文件
address=192.168.2.133#服务器端的ip
[test] # rsync的用户,只能由指定的用户去同步文件,可以多个用户同时存在
path=/tmp/1234/ # 服务器端下存放的文件内容(只能针对这个目录下的文件进行操作)
use chroot=true # 限定path路径,如果是true就只能在 path指定的目录下,如果想拷贝外面的软链接,就需要设
置成false
read only=no #这里表示可以对文件进行写操作
uid=root #以哪个用户身份去进行传输
gid=root #同上
auth users=test #限定用户只能是test,也可以不指定,看具体应用
secrets file=/etc/rsync.passwd # 设置test用户的密码,注意要设置成600权限。该文件内容形式(用户:密码) 例如 test:1234567
hosts allow=192.168.2.0/24 #允许该网段的ip进行rsync服务的访问,也可以是多个网段或者ip
如:hosts allow=192.168.2.168 192.168.2.113
#max connections #最大连接数,默认是0,既没有限制。可忽略
#list 查询该服务器上所用模块时,是否被列出,true为列出,false不被列出。可忽略
用法例如:rsync -av /root/123 192.168.2.133::test/ #(这里的test相当于上面的/tmp/1234/目录。注意这里是"::")
然后启动服务 rsync --daemon --config=/etc/rsyncd.passwd
如果想开机启动,可把上面一条命令加入/etc/rc.d/rc.local中
另外一种免密码登陆方式expect
yum install expext
#!/usr/bin/expect
set user "root" #设置用户名变量
set passwd "1234567" #设置用户密码
spawn ssh $user@192.168.2.1 #执行的命令
expect "yes/no" #匹配到yes/no
send "yes\r" #发送yes
expect "password:" #匹配到password
send "$passwd\r" #然后发送密码
interact #用户交互
#expect eof #结束
如下是expect 里面的形参设置
set b [lindex $argv 0] ;;第一个参数
set a [lindex $argv 1] ;; 第二个参数
set . ..................第N个参数
如果脚本里面有文件传输,可能会出现在文件传输过程中,突然断掉。这是由于expect脚本有一个默认的超时相应。
你需要重新设置默认响应时间
比如 set timeout $tout (tout 就是设置的时间,以秒为单位)