zoukankan      html  css  js  c++  java
  • 利用expect 工具批量分发公钥给SVR,实现自动分发

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

    分发好的效果图。

     因为我们在第一次给我们的服务器分发公钥的时候,每一个都需要确认输入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
    "
     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
    ";exp_continue}
           "*password" {send "$password
    "}
    }
    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
    "; exp_continue}
    "password:" { send "$passwd
    " }
    }
    expect eof
    exit

    第四步编写shell脚本,

    #!/bin/sh
    . /etc/init.d/functions
    for 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
      fi
    done

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

    第五步,测试效果。

     

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

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

  • 相关阅读:
    rest framework 认证 权限 频率
    rest framework 视图,路由
    rest framework 序列化
    10.3 Vue 路由系统
    10.4 Vue 父子传值
    10.2 Vue 环境安装
    10.1 ES6 的新增特性以及简单语法
    Django 跨域请求处理
    20190827 On Java8 第十四章 流式编程
    20190825 On Java8 第十三章 函数式编程
  • 原文地址:https://www.cnblogs.com/davidz/p/14570497.html
Copyright © 2011-2022 走看看