• Centos 集群配置SSH免登陆脚本


    首先编写脚本生成集群服务器列表:

    hostsList.sh 

    #!/bin/bash
    preIp="11.11.225."
    pwd="dyj2017"
    for i in `seq 2 80`;
    do
     echo -e $preIp$i $pwd >> hostsLists.txt
    done

    hostsLists.txt

    11.11.225.2 dyj2017
    11.11.225.3 dyj2017
    11.11.225.4 dyj2017
    ....
    11.11.225.78 dyj2017
    11.11.225.79 dyj2017
    11.11.225.80 dyj2017

    sshconfig.sh(CentOS 默认没有启动 ssh 无密登录,去掉 /etc/ssh/sshd_config 其中 2 行的注释,每台服务器都要设置)

    #!/bin/bash
    echo "读取ip列表中的IP和密码,并进行参数传递"
    for row in `cat $1 | awk '{printf("%s:%s:%s
    "),$1,$2,$3}'`
      do
    ip=`echo ${row} | awk -F ':' '{print $1}'`
    passwd=`echo ${row} | awk -F ':' '{print $2}'`
    echo $ip
    echo $passwd
    echo "生成秘钥.........."
    
    /usr/bin/expect <<-EOF
    spawn scp /etc/ssh/sshd_config cwgl@$ip:/home/cwgl/
    expect {
                  "yes/no" { send "yes
    ";exp_continue}
                  "password: " {send "$passwd
    ";exp_continue}
              }
    exit
    EOF
    
    /usr/bin/expect <<-EOF
    spawn ssh cwgl@$ip
    expect "password:"
    send "$passwd
    "
    expect "cwgl"
    send "su - root
    "
    expect "Password:"
    send "$passwd
    "
    expect "*#*"
    send "mv -f /home/cwgl/sshd_config  /etc/ssh/sshd_config
    "
    expect "*#*"
    send "systemctl restart sshd
    " 
    expect "*#*"
    exit
    EOF
    
    done
    echo "SSH免密码操作完毕"

    sshnoauth.sh(ssh免登陆)

    #!/bin/bash
    #说明:检查脚本所在服务器是否安装expect模块,生成IP列表中的秘钥
    #将生成的秘钥id_rsa.pub传回当前服务器并标记,生成authorized_keys
    #并分发到IP列表中的对应所有服务器
    #使用方法:./script.sh filename
    # ip列表中第一列为IP,第二列为IP对应的用户密码。列与列之间空格隔开
    echo "执行检测并安装expect模块"
    ep=`rpm -qa | grep expect` 
    if [ -z $ep   ] ; then
     echo "检测到当前服务器,没有安装expect模块,准备执行安装"
     sleep 2
     yum install -y expect
    else
     echo "当前服务器已经安装expect模块,3秒后,开始执行ssh文件同步"
     sleep 3
    fi
    echo "读取ip列表中的IP和密码,并进行参数传递"
    for row in `cat $1 | awk '{printf("%s:%s:%s
    "),$1,$2,$3}'`
      do
    ip=`echo ${row} | awk -F ':' '{print $1}'`
    passwd=`echo ${row} | awk -F ':' '{print $2}'`
    echo $ip 
    echo $passwd
    echo "生成秘钥.........."
    
    /usr/bin/expect <<-EOF
    spawn ssh root@$ip ssh-keygen -t rsa
    expect {
                    "yes/no" { send "yes
    ";exp_continue}
                    "password: " {send "$passwd
    ";exp_continue}
    		"/root/.ssh/id_rsa" {send "
    ";exp_continue}
    		"empty for no passphrase" {send "
    ";exp_continue}
    		"again" {send "
    ";exp_continue}
    		"Overwrite" {send "y
    ";exp_continue}
                  }
    exit
    EOF
    /usr/bin/expect <<-EOF
    spawn scp root@$ip:/root/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub$ip
    expect {
                    "yes/no" { send "yes
    ";exp_continue}
                    "password: " {send "$passwd
    ";exp_continue}
    	}
    EOF
    done
    #获取本地IP,删除重复秘钥
    ip2=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
    rm -rf /root/.ssh/id_rsa.pub$ip2
    echo "完成获取本地IP,删除重复秘钥操作"
    cat /root/.ssh/id_rsa.pub* >> /root/.ssh/authorized_keys
    echo "authorized_keys生成完毕"
    #scp authorized_keys 文件到各台机器上面。
    for row in `cat $1 | awk '{printf("%s:%s:%s
    "),$1,$2,$3}'`
      do
    ip=`echo ${row} | awk -F ':' '{print $1}'`
    passwd=`echo ${row} | awk -F ':' '{print $2}'`
    echo "上传分发authorized_keys文件到"$ip"服务器"
    /usr/bin/expect <<-EOF
    spawn scp /root/.ssh/authorized_keys @$ip:/root/.ssh/
    expect {
                    "yes/no" { send "yes
    ";exp_continue}
                    "password: " {send "$passwd
    ";exp_continue}
            }
    EOF
    done
    echo "SSH免密码操作完毕"

     修改服务器配置文件(值为局部变量)

    #!/bin/bash
    for row in `cat $1 | awk '{printf("%s:%s
    "),$1,$2}'`
    do
    ip=`echo ${row} | awk -F ':' '{print $1}'`
    echo -e $ip
    /usr/bin/expect <<-EOF
    spawn ssh root@$ip
    expect "*#*"
    send "echo -e $ip > /etc/mesos-slave/hostname
    "
    expect "*#*"
    exit
    EOF
    
    done
    

      

  • 相关阅读:
    读Pyqt4教程,带你入门Pyqt4 _009
    [Objective-C] 006_Protocol(协议)
    [JavaWeb基础] 003.JAVA访问Mysql数据库
    keras学习笔记-bili莫烦
    CentOS7安装codeblocks
    [转] Linux多线程编程之pthread
    [转] C++ 的关键字(保留字)完整介绍
    如何生成红黑树?一步一步画给你看(从二叉查找树到2-3树再到红黑树)
    C++标准库(体系结构与内核分析)(侯捷第二讲)(OOP GP、分配器、容器之间关系、list、萃取机、vector、array、deque、stack、queue、RB-tree、set、multiset、map、multimap)
    C++标准库(体系结构与内核分析)(侯捷第一讲)(标准库介绍、STL、六大部件、算法、容器分类、Array、Vector、List、Forward-List、Deque、stack、queue、multiset、multimap、分配器)
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/7452402.html
Copyright © 2020-2023  润新知