• 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
    
  • 相关阅读:
    GEF: 图形拖拽处理
    【矩阵快速幂】bzoj1297 [SCOI2009]迷路
    【扩展欧几里得】NOIP2012同余方程
    【高精度乘法】NOIP2003麦森数
    【数论·错位排列】bzoj4517 排列计数
    【数论】Lucas
    【NOIP2012】疫情传递
    【NOIP2012】旅行计划
    【Manacher算法】求最长回文串的优秀算法
    【Tarjan】洛谷P3379 Tarjan求LCA
  • 原文地址:https://www.cnblogs.com/cchilei/p/13023674.html
Copyright © 2020-2023  润新知