zoukankan      html  css  js  c++  java
  • [工具] 分布式系统下批量创建用户及分发公钥打通ssh通道的脚本

    在分布式系统下偶尔会有这样的需求,要增加一个服务时,需要在集群的所有节点上创建同一个用户,然后打通ssh通道,再分发软件包、配置、执行命令、启动服务...

    这个问题的根源是如何集中配置和管理系统,专业运维应使用如puppet等工具。但有时图简单或其它原因,不愿走puppet,这里给自己记几个简单的脚本备忘(前题条件:已经打通root的ssh通道,或另一个有sudo权限的用户):

    批量创建用户,参数:私钥、用户名、组名;要求有一个ip.list机器列表;

    #!/bin/bash
    
    if (( $# < 2 )); then
      echo "Usage: $0 <primary_key_path> <user_name> [group_name]"
      exit 1
    fi
    
    #pri_key is the path of your primary key
    pri_key=$1
    user_name=$2
    group_name=$user_name
    if (( $# == 3 )); then
      group_name=$3
    fi
    
    home_dir=/application/$user_name
    
    for i in `cat ip.list`; 
    do
      ssh -i $pri_key root@$i "groupadd $group_name; useradd -s /bin/bash -g $group_name -d $home_dir -m $user_name; chown -R $user_name:$group_name $home_dir" 1>result/$i.out 2>&1 &
    done

    分发公钥及打通ssh通道:

    #!/bin/bash
    
    if (( $# < 3 )); then
        echo "Usage: $0 <your primary key path> <user_name> <user's pub key>"
            exit 1
    fi
    
    #pri_key is the path of your primary key
    pri_key=$1
    user_name=$2
    pub_key=$3
    pub_key_fn=`basename $3`
    
    home_dir="/application/$user_name"
    tmpkey_path="/tmp/tmpkey"
    
    for i in `cat ip.list`; do
      scp -i $pri_key $pub_key root@$i:$tmpkey_path && 
      ssh -i $pri_key root@$i "echo 'password' | sudo -S -u $user_name mkdir -p $home_dir/.ssh && sudo -u $user_name bash -c 'cat $tmpkey_path >> $home_dir/.ssh/authorized_keys'" 
    done
  • 相关阅读:
    初学三种神经网络(前馈,竞争,递归联想存储网络)
    链表操作,空间复杂度要求为O(1)
    单链表的回文判断(O(n)时间复杂度和O(1)的空间复杂度)
    Floyd算法小结
    排序算法Java实现(基数排序)
    排序算法Java实现(归并排序)
    排序算法Java实现(堆排序)
    排序算法Java实现(选择排序)
    排序算法Java实现(快速排序)
    排序算法Java实现(冒泡排序)
  • 原文地址:https://www.cnblogs.com/ZisZ/p/3449392.html
Copyright © 2011-2022 走看看