实验环境: 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
![]()
![]()
验证:远程执行命令
![]()
![]()