expect 免交互分发密钥_centos 7.4

实验环境:
4台Centos 7.4 服务器,1台管理机
IP:192.168.189.73(管理机) 74、77、78
需求:实现管理机 免交互 分发密钥到其他服务器
一、安装expect
yum install expect -y
二、创建用户
本实验是在4台服务器上都创建一个相同的帐户和密码。也可以使用root,密码必须一样。


三、编写脚本
3.1、编写expect 脚本
vim /opt/fenfa.exp

#!/usr/bin/expect
if { $argc != 2 } {
    send_user "usage: expect fenfa.exp file host\n"
    exit
}

#定义变量
set file [lindex $argv 0]
set host [lindex $argv 1]
set password "windows@123"
#expect 利用 spawn 来执行 shell 的命令
spawn ssh-copy-id -i $file "jack@$host"
expect {
    "yes/no" {send "yes\r";exp_continue}
    "*password" {send "$password\r"}
}
expect eof



3.2、编写shell脚本
vim /opt/fenfa.sh
#!/bin/bash
. /etc/init.d/functions
for ip in `cat ip.txt`
do
expect fenfa.exp ~/.ssh/id_dsa.pub $ip
    if [ $? -eq 0 ];then
      action "$ip" /bin/true
    else
      action "$ip" /bin/false
    fi
done
chmod +x fenfa.sh



3.3、把所有的IP,都记录到一个文件。
vim /opt/ip.txt

确保这三个文件都放在同一个文件夹。
四、在管理机上面,生成 jack 用户的 密钥文件。


五、测试
5.1、分发到单台服务器:
在管理机上操作,切换到jack用户


验证:远程执行命令


5.2、分发到多台服务器:
管理机上先删除known_hosts


192.168.189.74 上删除authorized_keys


管理机上,切换到 jack 用户,执行分发的shell脚本。
cd /opt
./fenfa.sh






验证:远程执行命令