潇湘夜雨移动版

主页 > 系统 >

shell与expect批量推送公钥

介绍:通过shell结合expect实现批量推送公钥到自定IP范围的主机,以实现免密码登录
 
1、创建脚本
[root@localhost ~]# vim pushkey2.sh
#/bin/bash
#check expect
rpm -q expect &>/dev/null
if [ $? -ne 0 ]
then
yum -y install expect
fi
#check public key or create
if [ ! -f ~/.ssh/id_rsa ]
then
ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P '' #创建密钥
fi
 
#copy pub.key for host
IFS=$'\n'
for line in {128..129} #扫描制定的IP范围
 
do
{
ip=192.168.198.$line
user=root #设定用户名
password=123456 #设定密码
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ] #如果主机存在才推送公钥
then
 
echo $ip
/usr/bin/expect <<-EOF
spawn ssh-copy-id  $user@$ip #复制公钥
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" };
}
expect eof
EOF
echo "$ip have finished at ` date +%F-%T:%N`" |tee -a /root/pub.log #输出日志
fi
}&
done
echo "process is runing ..."
wait
 
 
2、执行脚本
[root@localhost ~]# bash pushkey2.sh 
已加载插件:fastestmirror, security
设置安装进程
Loading mirror speeds from cached hostfile
epel/metalink                                                                                                                                                           | 5.6 kB     00:00     
* base: centos.ustc.edu.cn
* epel: mirrors.ustc.edu.cn
* extras: centos.ustc.edu.cn
* updates: centos.ustc.edu.cn
base                                                                                                                                                                    | 3.7 kB     00:00     
epel                                                                                                                                                                    | 4.3 kB     00:00     
epel/primary_db                                                                                                                                                         | 5.9 MB     00:02     
extras                                                                                                                                                                  | 3.4 kB     00:00     
extras/primary_db                                                                                                                                                       |  29 kB     00:00     
updates                                                                                                                                                                 | 3.4 kB     00:00     
updates/primary_db                                                                                                                                                      | 828 kB     00:00     
解决依赖关系
--> 执行事务检查
---> Package expect.x86_64 0:5.44.1.15-5.el6_4 will be 安装
--> 处理依赖关系 libtcl8.5.so()(64bit),它被软件包 expect-5.44.1.15-5.el6_4.x86_64 需要
--> 执行事务检查
---> Package tcl.x86_64 1:8.5.7-6.el6 will be 安装
--> 完成依赖关系计算
 
依赖关系解决
 
===============================================================================================================================================================================================
软件包                                     架构                                       版本                                                     仓库                                      大小
===============================================================================================================================================================================================
正在安装:
expect                                     x86_64                                     5.44.1.15-5.el6_4                                        base                                     256 k
为依赖而安装:
tcl                                        x86_64                                     1:8.5.7-6.el6                                            base                                     1.9 M
 
事务概要
===============================================================================================================================================================================================
Install       2 Package(s)
 
总下载量:2.2 M
Installed size: 4.9 M
下载软件包:
(1/2): expect-5.44.1.15-5.el6_4.x86_64.rpm                                                                                                                              | 256 kB     00:03     
(2/2): tcl-8.5.7-6.el6.x86_64.rpm                                                                                                                                       | 1.9 MB     00:01     
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                                                                           426 kB/s | 2.2 MB     00:05     
运行 rpm_check_debug 
执行事务测试
事务测试成功
执行事务
 正在安装   : 1:tcl-8.5.7-6.el6.x86_64                                                                                                                                                    1/2 
 正在安装   : expect-5.44.1.15-5.el6_4.x86_64                                                                                                                                             2/2 
 Verifying  : expect-5.44.1.15-5.el6_4.x86_64                                                                                                                                             1/2 
 Verifying  : 1:tcl-8.5.7-6.el6.x86_64                                                                                                                                                    2/2 
 
已安装:
 expect.x86_64 0:5.44.1.15-5.el6_4                                                                                                                                                            
 
作为依赖被安装:
 tcl.x86_64 1:8.5.7-6.el6                                                                                                                                                                     
 
完毕!
process is runing ...
192.168.198.129
192.168.198.128
spawn ssh-copy-id root@192.168.198.129
spawn ssh-copy-id root@192.168.198.128
The authenticity of host '192.168.198.129 (192.168.198.129)' can't be established.
RSA key fingerprint is 10:62:b7:95:e7:38:a8:82:27:58:f6:d2:30:40:c7:d6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.198.129' (RSA) to the list of known hosts.
root@192.168.198.128's password: root@192.168.198.129's password: 
 
Now try logging into the machine, with "ssh 'root@192.168.198.129'", and check in:
 
 .ssh/authorized_keys
 
to make sure we haven't added extra keys that you weren't expecting.
 
Now try logging into the machine, with "ssh 'root@192.168.198.128'", and check in:
 
 .ssh/authorized_keys
 
to make sure we haven't added extra keys that you weren't expecting.
 
192.168.198.128 have finished at 2017-05-21-12:46:17:723140806
192.168.198.129 have finished at 2017-05-21-12:46:17:721018165
 
3、登录测试
[root@localhost ~]# ssh 192.168.198.129 #现在登录不需要输入密码
Last login: Sun May 21 12:20:42 2017 from 192.168.198.128
 
(责任编辑:liangzh)