利用expect 工具批量分发公钥给SVR,实现自动分发

expect是一个很好用的工具,他的亮点就是可以简化会话的交互式操作,实现自动分发公钥的功能,不要自己每一个都去输入密码或者IP了。这样大大节约了运维工作的效率。

分发好的效果图。

 

利用expect 工具批量分发公钥给SVR,实现自动分发

 

 因为我们在第一次给我们的服务器分发公钥的时候,每一个都需要确认输入yes然后输入密码。这些工作本来是需要我们手动去输入的,这就是交互式会话。

但是那么多服务器,几百几千台,我们每一个都去重复性的去输入吗?那太麻烦了。所有就有了expect可以自动输入。

大概四个要领。

第一步,安装软件,

yum install expect -y

直接yum就安装了,很方便。

然后批量新建用户,本来批量新建用户,这里我们就直接在CRT里直接批量新建了。

useradd oldgirl

echo 123456|passwd --stdin oldgirl

su - oldgirl

第二步,我们要备份自己的公钥,然后把本机的私钥移走到另外的目录。因为私钥是不能给被人的,只要公钥才能给别人。然后把公钥备份一下,并把公钥copy一份命名为authorized_keys。

只能命名为这个,这个就相当于是手动的运行ssh-copy-id  这个命令,懂的都懂。

 

第三步,设置自动分发的exp的脚本,

#! /usr/bin/expect
#这里的意思是要输入3个参数,如果不输入三个参数就会输出一句话if { $argc !=3 } {
 send_user "usage: expect fenfauser-simple.exp file host dir\n"
 exit
}#define var 定义了三个变量set file [lindex $argv 0]
set host [lindex $argv 1]
set dir  [lindex $argv 2]
set password "123456"spawn scp -P22 -r -p $file oldgirl@$host:$dir#可能出现的对话框,然后send输入
expect {       "yes/no" {send "yes\r";exp_continue}       "*password" {send "$password\r"}
}
expect eof
exit

相信这么简单的代码,稍微有一点编程基础的都可以看懂吧!此脚本的名字

fenfauser-simple.exp   

顺便插入一个使用expect自动登入SSH的代码。也很简单。

#! /usr/bin/expect
set host "192.168.3.106"set passwd "123456"spawn ssh oldgirl@$host
expect {"yes/no" { send "yes\r"; exp_continue}"password:" { send "$passwd\r" }
}
expect eof
exit

 

第四步编写shell脚本,

#!/bin/sh. /etc/init.d/functionsfor ip in `cat iplist`do
  expect fenfauser-simple.exp /home/oldgirl/.ssh $ip /home/oldgirl >/dev/null 2>
&1
  if [ $? -eq 0 ] ;then  action "$ip" /bin/true
  else  action "$ip" /bin/false
  fidone

此脚本的名字fenfa-sshkey.sh   这个脚本也很简单,意思就是引入上面的exp脚本,然后输入三个变量, 本地的公钥位置,IP   ,远程目录的公钥位置。

第五步,测试效果。

 利用expect 工具批量分发公钥给SVR,实现自动分发

 

 把私钥copy过来,把公钥也改回来名字,单机测试了一下SSH可以连,不用密码。

如果需要批量操作,就需要引用其他的脚本来实现了。例如批量取IP,批量分发hosts文件,批量安装软件等等。

上一篇:Shell编程之免交互


下一篇:Linux免交互登录远程服务器并执行命令