自动分发秘钥脚本(复制修改ip即可使用)

秘钥分发目的是在大量节点时:可节省在使用自动化运维工具(ansible,saltstack等)定义的tag标签等,不管是使用ansible-play -t tag1还是ansible-playbooks --skip-tags tag1,都要节省时间,可直接登录到该节点进行操作;后续scp命令等都使用比较方便

需要用到expect命令,配置好阿里源直接yum即可

yum install expect -y

秘钥信息(隐藏文件,使用ls -a查看)默认保存在/root/.ssh/目录下存在id_rsa,id_rsa.pub

当分发秘钥成功后会生成一个类似ansible中/etc/ansible/hosts文件

在这个文件中保存着通过秘钥认证的主机

用if语句(单分支,双分支,多分支均可)进行判断在/root/.ssh目录中是否保存之前的秘钥信息;

-e包含文件(f)和目录(d);

expect 为交互命令,{send \r}可理解为在生成秘钥行(ssh-keygen)的时候执行回车命令。

后使用for循环进行秘钥分发。注:在执行秘钥分发时可能会出现hang住的情况,此情况大概率是秘钥分发主机网络不通情况导致。

出现此情况可选加set timeout 6;表示在6秒内完成秘钥分发,如6秒内没有完成,自动跳转另一个循环。

特别注意:在使用for语句时候一定要在后面加上done,由于使用输入重定向,在最后写入eof后总感觉脚本已经完成,执行时报错,检查脚本发现少done......(粗心)


#!/bin/bash
yum install expect -y
#rm -rf /root/.ssh/*
if [ -e /root/.ssh/id_rsa ];then
        rm -rf /root/.ssh/*
fi

#ssh-keygen
/usr/bin/expect<<eof
spawn ssh-keygen
expect {
"(/root/.ssh/id_rsa)" {send \r;exp_continue}
"passphrase" {send \r;exp_continue}
"again" {send \r}
}
expect eof
exit
eof

#ssh-copy-id
ip=192.168.10.
for i in {1..100}
do
/usr/bin/expect<<eof
spawn ssh-copy-id $ip$i
expect {
"yes/no" {send yes\r;exp_continue}
"password" {send root\r}        #root替换为你的密码
}
expect eof
exit
eof
done

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值