shell批量分发密钥

  • Post author:
  • Post category:其他


ping 主机 测试是否网络通畅

ping -c1 W1 192.168.199.199

下载epel源并更新yum仓库

wget -O /etc/yum.repos.d/epel.repo

http://mirrors.aliyun.com/repo/epel-7.repo


yum -y clean all

yum makecache

安装sshpass工具

yum -y install sshpass

无交互生成密钥

ssh-keygen -t dsa -f ~/.ssh/id_dsa -P “”

测试密钥是否生成

test -f ~/.ssh/id_rsa

if [ $? -ne 0 ];then

fi

分发密钥

ssh-copy-id root@192.168.111.130

分发密钥会有交互,使用expect解决

先安装expect

yum -y install expect

案例:ips.txt 中是  要使用的IP

while read line

do

pass=QZY143269

/usr/bin/expect <<-EOF

spawn ssh-copy-id root@$line

expect {  #注意:expect 与 { 中间一定要加空格

“yes/no” { send “yes\r”; exp_continue }

“password:” { send “$pass\r” }

}

expect eof

EOF

done<ips.txt

测试ssh 免密登录

ssh root@192.168.111.130

出现 Last login: Wed Jun  9 16:59:08 2021  成功

完整代码   确保安装了sshpass工具

#!/usr/bin/bash

>ips.txt

#这里将需要的主机IP 生成文件,如果有ip文件就不需要

for i {160..162};then

do

ip=192.168.111.$i

{

# 检测ip,可以ping通的放入文件待用

ping -c1 W1 $ip

if [ $? -eq 0 ];then

echo $ip >> ips.txt

fi

}&

done

#检测是否有密钥文件,没有则生成

test -f ~/.ssh/id_rsa

if [ $? -ne 0 ];then

#无交互生成密钥

ssh-keygen -t dsa -f ~/.ssh/id_dsa -P “”

fi

while read line

do

pass=QZY143269

/usr/bin/expect <<-EOF

spawn ssh-copy-id root@$line

expect {  #注意:expect 与 { 中间一定要加空格

“yes/no” { send “yes\r”; exp_continue }

“password:” { send “$pass\r” }

}

expect eof

EOF

done<ips.txt

经测试代码可用,有问题可讨论



版权声明:本文为weixin_44541467原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。