集群07-expect非交互式批量管理分发项目实战
架构图
1、 创建用户名和密码
[root@m01 ~]# useradd demo
[root@m01 ~]# echo"000000" | passwd demo –stdin
[root@backup ~]# useradd demo
[root@backup ~]# echo"000000" | passwd demo –stdin
[root@nfs01 ~]# useradd demo
[root@nfs01 ~]# echo"000000" | passwd demo –stdin
[root@web01 ~]# useradd demo
[root@web01 ~]# echo"000000" | passwd demo –stdin
切换到demo用户
[root@m01 ~]# su - demo
[root@backup ~]# su - demo
[root@nfs01 ~]# su - demo
[root@web01 ~]# su – demo
2、在m01管理机上生成私钥
[demo@m01 ~]$ ssh-keygen -tdsa
查看生成的私钥和公钥
[demo@m01 ~]$ ll .ssh/
总用量 8
-rw------- 1 demo demo 672 4月 814:44 id_dsa
-rw-r--r-- 1 demo demo 601 4月 814:44 id_dsa.pub
非交互式一键生成私钥:
[demo@m01 .ssh]$ ssh-keygen-t dsa -P '' -f ~/.ssh/id_dsa &> /dev/null
3、安装expect
yum –y install expect
4、m01分发公钥
(1)首先创建分发公钥脚本
#!/usr/bin/expect
set host [lindex $argv 0]
set password "000000"
set username "demo"
spawn ssh-copy-id -i/home/$username/.ssh/id_dsa.pub $username@$host
expect {
"yes/no"{send "yes\r";exp_continue}
"password:"{send "$password\r"}
}
expect eof
(2)批量执行分发脚本
#!/bin/bash
for i in 8 31 41; do
echo${i}
expect/script/fenfa_sshkey.sh 172.16.1.${i}
done
其他知识:
expect语法:
set 变量名 “ 值 ” #即变量=值
set 变量名 [lindex $arg 0] #传递参数给变量,变量=$arg 0(代表第一个参数的值)
spawn + 命令 #交互的执行shell命令
expect ...send对:expect等待希望出现的匹配串,对于匹配到的串,send发送命令进行执行
interact 执行完成后保持交互状态,把控制权交给控制台
如远程自动登录脚本:
#!/usr/bin/expect
set host "172.16.1.8"
set password "000000"
set username "demo"
spawn ssh $username@$host
expect {
"yes/no"{send "yes\r";exp_continue}
"password:"{send "$password\r"}
}
Interact