zoukankan      html  css  js  c++  java
  • ssh 免密码登录自动设置脚本

    目的

    一键式配置集群节点间免密码登录

    实现

    vim ~/nonpassword
    

    脚本内容:

    #!/bin/sh
    
    # all node names
    NODES=()  
    # all node password 
    PASS=$1 
    ###### Validation args length
    nodes_length=$(($# - 1))
    if [[ ss -gt 0 ]];then
      echo "Exit: At least two parameters, eg: your_password, node1"
      exit 2 
    fi
    ###### Get all node name 
    i=0
    for node in $*
    do
       if [[ i -gt 0 ]]; then
         j=$((i - 1)) 
         NODES[j]=$node
       fi
       let i++
    done
    MASTER=`hostname`
    
    yum -y install expect
    
    ###################################
    function ssh_cmd0(){
    user_and_host=$1
    password=$2
    cmd=$3
    /usr/bin/expect <<-EOF
    set timeout 5
    spawn ssh $user_and_host
    expect {
    "yes/no" { send "yes
    ";exp_continue }
    "password" { send "$password
    " }
    }
    expect "#"  
    send "$cmd
    "
    expect "#" 
    exit 0
    interact
    EOF
    }
    
    function ssh_cmd(){
        ssh_cmd0 "$1" "$2" "echo 'start_mark';$3 ;echo 'end_mark'" | sed -n '/^start_mark/,/^end_mark/p'|grep -Ev '(^start_mark|^end_mark)'
    }
    
    ###### Create all nodes authorized_keys, And collection to master.
    echo "" > ~/.ssh/authorized_keys
    echo "" > ~/.ssh/known_hosts
    
    for s in ${NODES[@]}
    do
      echo -e "
    START:: Slave node ($s) generates id_rsa.pub and sends master node ($MASTER)"
      
      ssh_cmd "root@$s" "$PASS" "rm -f ~/.ssh/id_rsa; ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa"
      ssh_cmd "root@$s" "$PASS" "cat ~/.ssh/id_rsa.pub"  >> ~/.ssh/authorized_keys
      
      echo "DONE:: Slave node ($s) generates id_rsa.pub and send to master node ($MASTER)" 
    done
    ###### Copy collectioned authorized_keys to all nodes.
    echo -e "
    ######################### SENDING authorized_keys TO ALL NODE #########################"
    for s in ${NODES[@]}
    do
        echo -e "
    START:: Master node ($MASTER)  send ALL id_rsa.pub(authorized_keys) to slave node ($s)"    
    	
        ssh_cmd "root@$s" "$PASS" "echo '`cat  ~/.ssh/authorized_keys`' > ~/.ssh/authorized_keys"
        
        echo -e "DONE:: Master node ($MASTER)  send ALL id_rsa.pub(authorized_keys) to slave node ($s)
    "   
    done
    echo "Complete!"
    
    chomd +x ~/nonpassword
    

    用法

    脚本用法:

    ~/nonpassword <password> <node1> <node2>
    

    password:是指所有的节点的登录密码,要求所有节点必须是相同的密码。

    具体用例:

     ~/nonpassword 'mypassoword' node1 node2 node3
    

    执行成功后,就可以在 node1、node2 和 node3 之间免密码登录了,比如已经登上了 node1,然后要登录 node2,可直接在 node1 上执行命令:

    ssh node2
    
  • 相关阅读:
    存储过程output String[1]: Size 属性具有无效大小值0
    深入理解JS异步编程四(HTML5 Web Worker)
    深入理解JS异步编程三(promise)
    深入理解JS异步编程二(分布式事件)
    深入理解JS异步编程(一)
    不定高多行溢出文本省略
    深入解析js中基本数据类型与引用类型,函数参数传递的区别
    javascript的replace+正则 实现ES6的字符串模版
    从输入网址到显示网页的全过程分析
    WebStorage 和 Cookie的区别
  • 原文地址:https://www.cnblogs.com/cchilei/p/13023674.html
Copyright © 2011-2022 走看看