shell批量免密

背景:批量做免密操作,114台主机10分钟才跑完,主机在国外
前提条件:
使用ssh-keygen生成密钥

ssh-keygen -q -f ~/.ssh/zabbix001 -b 2048 -t rsa -N '' -C 用于aws云主机的
-q:静默输入
-f:指定用来保存密钥的文件名
-b:指定密钥长度
-t:指定要创建的密钥类型
-C:添加注释

expect是单独的一种脚本语言工具。expect不是/bin/sh,也不是/bin/bash,它是Linux用于模拟人机交互行为的程序。

  • Expect中最关键的四个命令:
    spawn:启动需要交互的进程,只有spawn 执行的命令结果才会被expect 捕捉到
    send:发送字符串给spawn 启动的那个进程,用于模仿“人"向进程发出linux命令用
    expect:从进程中捕获关键字
    interact:用于将交互双方由expect脚本和机器内核改为——>字符终端和机器内核(即为正常人和机器交
  • 其他命令
    expect eof: 结束expect匹配互的模式

单线程

#!/bin/bash
username=pchuant
passwd=123456
for ip in `cat hosts`
do
/usr/bin/expect << EOF
spawn ssh-copy-id $username@$ip
expect {
    # 如果有yes或no关键字
    "(yes/no)?" {  
        # 则输入yes
          send "yes\r"
        # 输入完yes后如果输出结果有password关键字,
        expect  "password:" 
        # 则输入密码
          send "$passwd\r"
    }
    # 如果上次输出结果有password,则输入密码
    "password:" {send "$passwd\r"}
}
expect eof
EOF
done  

多线程(不太行)

#!/bin/bash
#Concurrency is 10
user=juzix
passwd=123456
[ -e /tmp/fd1 ] || mkfifo /tmp/fd1     #创建有名管道
exec 3<>/tmp/fd1                       #创建文件描述符,以可读可写的方式关联管道文件,这时候文件描述符3就有了有名管道文件的所有特性
rm -rf /tmp/fd1                        #关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了
for((i=1;i<=10;i++))
do
    echo >&3                       #$3代表引用文件描述符3,这条命令代表往管道里面放入一个“令牌”
done

#for ip in `cat hosts`
for ip in {1..40}
do
read -u3
{
/usr/bin/expect << EOF
spawn ssh-copy-id ${user}@10.1.1.${ip}
expect {
    "(yes/no)?" {
    send "yes\r"
    expect  "password:" {send "${passwd}\r"}
    }
    "password:" {send "${passwd}\r"}
}
expect eof
EOF
echo >&3
}&
done
wait
exec 3<&-                              #关闭文件描述符的读
exec 3>&-                              #关闭文件描述符的写

参考文章

多线程执行for循环shell脚本
exec命令操作文件描述符

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,822评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,467评论 0 5
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,173评论 0 23
  • 「變得愈來愈成熟的原因,只因遇上的壞人比你多。」 無論是事業、朋友、愛情,我們都會遇上很多「壞人」,他們為了金錢、...
    宝二爺阅读 222评论 0 0
  • 好与坏一定是相对的吗? 张先生不这么觉得,他认为一定存在绝对意义上的好与坏,如同上帝定义的两个constant,不...
    秋无迹阅读 212评论 0 2