分享一个shell脚本:通过Jumper机器来创建Jumper和target机器账号

说明

代码使用和框架图

Jumper_target_machine_v3.md脚本使用的框架图:

Jumper_target_machine_v3.md脚本作用:

通过Jumper机器来创建Jumper和target机器账号,完成target机器公钥写入,达到从电脑终端免密登录target机器。

Jumper_target_machine_v3.md脚本使用:

  • (1)只能使用root账户执行;
  • (2)Jumper和target机器家目录均指定到/data目录下;
  • (3)临时加载Jumper的root账户公钥到target机器root账户下,脚本执行完之后,自动回收;
  • (4)逻辑判断Jumper和target机器是否存在待创建账号;

Jumper_target_machine_v3.md脚本后期优化:

  • (1)对脚本中全局变量进行优化;
  • (2)对脚本中一些目录定义成全局变量,方便更改和使用;

代码内容

cat Jumper_target_machine.sh

#!/bin/sh

#脚本作用
# This code is used to create and check users on the bigcloud springboard(jumper), while creating and creating users on the target machine.
# The trigger and target home directory is under /data(Jumper和Target机器家目录均在/data目录下)
# Code the author: wutf
# contact: xxxx
# date: 2019-06-12

#加载系统函数库
. /etc/init.d/functions

#输入待创建用户的名字
read -p "Please enter the user you will be checking: " username

#定义判断执行账户函数
function user(){
    if [ $UID -ne 0 ];then
        action "You are not root!!" /bin/false
        exit 2
    fi
}

#临时存放Jumper pub到目标机auth
function add_jumper_pub(){
    if [ -f /root/.ssh/id_rsa.pub ];then
        ssh-copy-id [email protected]${ip_array} >/dev/null 2>&1
    else
        cat /dev/zero | ssh-keygen -q -N \"\" > /dev/null && ssh-copy-id [email protected]${ip_array} >/dev/null 2>&1
    fi
}

#清空目标机auth里Jumper pub
function del_jumper_pub(){
    root_pub_info=$(cat /root/.ssh/id_rsa.pub)
    ssh [email protected]${ip_array} "sed -i ‘s#$root_pub_info# #g‘ /root/.ssh/authorized_keys; sed  -i -e s/^‘ ‘*//g -e /^$/d -e /^#/d /root/.ssh/authorized_keys"
}

#创建Jumper服务器用户账号
function jumper_add_user(){
    useradd -d /data/$username -m $username
    sudo -S su - $username -c "cat /dev/zero | ssh-keygen -q -N \"\" > /dev/null; exit"
}

#检查Jumper服务器上是否有待创建账号,如无,则创建
function jumper_check_user(){
    check_name=$(grep "$username" /etc/passwd|awk -F : ‘{print $6}‘)
    if [ -z $check_name ];then
        echo -e "\033[31m Jumper user $username is not exist \033[0m"
        #action "Jumper starting create $username.......waiting~" /bin/true
        echo -e "\033[32m Jumper starting create $username.......waiting~ \033[0m"
        #导入jumper_add_user()函数
        jumper_add_user
        action "Jumper create $username is ok !" /bin/true
    else
        #action "Jumper user $username is exist" /bin/true
        echo -e "\033[32m Jumper user $username is exist \033[0m"
    fi
}

#创建Jumper和导入mac/windows本公钥
function id_pub_txt(){
    #查看Jumper和mac/windows本公钥文件是否存在
    Id_Pub_mac=$(grep "$username" /etc/passwd|awk -F":" ‘{print $6}‘)/.ssh/authorized_keys
    Id_Pub_Jumper=$(grep "$username" /etc/passwd|awk -F":" ‘{print $6}‘)/.ssh/id_rsa.pub
    if [ ! -f $Id_Pub_mac ];then
        action "Jumper $username mac.pub is not exist" /bin/false
        read -p "Please input the mac.pub of print you want: " computer
        echo -e "\033[32m the mac.pub will write into authorized file..waiting.... \033[0m"
        sudo -S su - $username -c "[ ! -f ~/.ssh/authorized_keys ] && touch  ~/.ssh/authorized_keys; echo -e $computer >> ~/.ssh/authorized_keys"
        action "$username mac.pub has writed into authorized file!" /bin/true
       #echo -e "\033[32m $username mac.pub has writed into authorized file! \033[0m"
    else
       # action "Jumper mac.pub is exist" /bin/true
        echo -e "\033[32m Jumper mac.pub is exist \033[0m"
    fi
    if [ ! -f $Id_Pub_Jumper ];then
        echo "Jumper $username jumper.pub is not exist"
       #action "Jumper start creating $username pub.......waiting~" /bin/true
        echo -e "\033[32m dl1 start creating $username pub.......waiting~ \033[0m"
        sudo -S su - $username -c "cat /dev/zero | ssh-keygen -q -N \"\" > /dev/null"
        sudo -S su - $username -c "[ ! -f ~/.ssh/authorized_keys ] && touch ~/.ssh/authorized_keys || echo $(cat $(grep $username /etc/passwd|awk -F : ‘{print $6}‘)/.ssh/id_rsa.pub) >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"
        action "Jumper create $username pub is OK and Jumper pub has writed into authorized!" /bin/true
        #echo -e "\033[32m dl1 create $username pub is OK and dl1_pub has writed into authorized! \033[0m"
    else
       # action "Jumper $username pub is exist" /bin/true
        echo -e "\033[32m Jumper $username pub is exist \033[0m"
        echo "$(cat $Id_Pub_mac)" | grep -q "$(cat $Id_Pub_Jumper)"
        if [ $? -eq 0 ]; then
            echo -e "\033[32m authorized has Jumper pub! \033[0m"
        else
            sudo -S su - $username -c "[ ! -f ~/.ssh/authorized_keys ] && touch ~/.ssh/authorized_keys || echo $(cat $(grep $username  /etc/passwd|awk -F : ‘{print $6}‘)/.ssh/id_rsa.pub) >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"
        fi
        action "Jumper pub has writed into authorized!" /bin/true
        #echo -e "\033[32m Jumper pub has writed into authorized! \033[0m"
    fi
}

#定义Jumper通过ssh登录目标机服务器函数
#在目标机服务器上创建待创建用户

#输入目标机的IP地址
read -p "Please enter the IP address of the target machine you will log into:" ip_array

function ssh_servers(){
    read -p "Please enter the create target machine account name: " target_username
    #检查目标机用户id
    ssh [email protected]${ip_array} id -u $target_username >/dev/null 2>&1
    if [ $? -eq 0 ];then
        echo -e "\033[32m 目标机服务器用户 $target_username 已经存在 \033[0m"
    else
        echo -e "\033[32m 目标机服务器上将创建待创建用户 $target_username \033[0m"
        ssh [email protected]${ip_array} "useradd -d /data/$target_username -m $target_username; exit"
        ssh [email protected]${ip_array} "sudo -S su - $target_username -c ‘cat /dev/zero | ssh-keygen -q -N \"\" > /dev/null‘"
        ssh [email protected]${ip_array} "sudo -S su - $target_username -c ‘touch /data/$target_username/.ssh/authorized_keys && chmod 600 /data/$target_username/.ssh/authorized_keys;exit‘"
        action "标机服务器上待创建用户 $target_username 创建完毕!" /bin/true
    fi
}

#拷贝Jumper上authorized_keys文件至目标机服务器待创建账户并更改所属主组
function scp_authorized(){
    scp -q /data/$username/.ssh/authorized_keys [email protected]${ip_array}:/data/$target_username/.ssh/auth_tmp
    ssh [email protected]${ip_array} "chmod 777 /data/$target_username/.ssh/auth_tmp; exit"
    ssh [email protected]${ip_array} "sudo -S su - $target_username -c ‘cat /data/$target_username/.ssh/auth_tmp >> /data/$target_username/.ssh/authorized_keys && rm -rf /data/$target_username/.ssh/auth_tmp‘; exit"
    ssh [email protected]${ip_array} "chown -R $target_username:$target_username /data/$target_username/.ssh; exit"
    action "Jumper上authorized_keys文件已传至目标机服务器" /bin/true
}
#总函数执行流程,在Jumper服务器执行
function main(){
    user
    add_jumper_pub
    jumper_check_user
    id_pub_txt $computer
    ssh_servers
    scp_authorized
    del_jumper_pub
}
main $*

原文地址:https://blog.51cto.com/wutengfei/2409038

时间: 2024-10-11 02:55:04

分享一个shell脚本:通过Jumper机器来创建Jumper和target机器账号的相关文章

[一] 编写第一个 Shell 脚本

什么是 Shell 脚本? 最简单的解释,一个 shell 脚本就是一个包含一系列命令的文件.shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样. Shell 有些独特,因为它不仅是一个功能强大的命令行接口,也是一个脚本语言解释器.我们将会看到, 大多数能够在命令行中完成的任务也能够用脚本来实现,同样地,大多数能用脚本实现的操作也能够 在命令行中完成. 虽然我们已经介绍了许多 shell 功能,但只是集中于那些经常直接在命令行中使用的功能. She

第一个shell脚本——修改配置文件

有需求,可以让自己偷懒才是学习的真正动力.由于测试环境在构建代码之后总是需要手动修改配置文件,因此边学习边完成了一个shell脚本,可以一键修改. 定义了一个函数,输出信息以绿色字体显示. function echo_green { echo -e "\033[32m$1\033[0m" } 输出提示信息 echo_green "是否一键修改xxx?(y/n)" 读取键盘输入 read answer 要修改的配置文件有两类:一类是明确清楚应该修改哪些字符串,直接用替

分享一个SQLSERVER脚本

原文:分享一个SQLSERVER脚本 分享一个SQLSERVER脚本 很多时候我们都需要计算数据库中各个表的数据量很每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(50) , rowsinfo BIGINT , reserved VARCHAR(20) , datainfo VARCHAR(20) , index_size VARCHAR(20) , unused VARCHAR(20) ) DECLARE @

shell脚本中执行另一个shell脚本

分类: 可以在一个shell脚本中执行另一个shell脚本(或非可执行文件,主要用于取得一些变量的值),方法是: . 文件名(包括路径) 或 变量=文件名(包括路径) . $变量 注意,圆点后面有个空格. 这样,在本shell脚本的后面部分就可以引用其他文件中声明的一些变量. 当再用这些变量去执行第3个脚本时,我不知是怎么回事,总是有些莫名其妙的错误,发现只有这个文件中不存在空行才行,哪怕只有一个注释符,都不会出错,就是不能有空行. 其实我想应该也不是这个问题,而是windows和linux处理

转:Shell 编程--本文结合大量实例阐述如何编写一个shell脚本

转自:情報官世界 本文结合大量实例阐述如何编写一个shell脚本. 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性.可维护性和便携性比效率更重要的任务. 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bas

Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令,

Linux系统的rm命令太危险,一不小心就会删除系统文件.写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时都要做一个备份,然后再删除. 假设有一个大的分区/data/,每次删除文件或者目录前,都要在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201802021054,然后把所有删除的文件同步到该目录下面,可以使用rsync -R把文件路径一同同步 答案: #!/bin/bash d=`date +%Y%m%d%H%M` read -p "Are y

Shell 脚本小试牛刀(4) -- 创建 git 仓库

之前写过一个<Git 使用及进阶实战>,其中讲解了很多Git 的基本用法,包括创建仓库等使用以及一些错误排除,还是挺好的 GIT 普及博文. 我经常会在本地家用主机 /服务器上创建 git 仓库,可能一个语言的学习或者一个项目都需要一个git 仓库.不得不说创建仓库还是挺烦人的,有的时候会遗漏或者忘记命令,于是我写了一个简单的脚本来简化创建GIT 仓库的繁杂无趣的过程: #!/bin/bash # (C) 2014 Yunlong Zhou <[email protected]>

Linux Shell脚本 几种循环语句创建用户的方法

大家好,我是孤云暮雨,今天给大家带来的是"Linux Shell脚本 几种循环语句创建用户的方法" 添加user1-user20用户 for循环: #!/bin/bash for i in {1..20} do useradd user$i echo "user$i Users to add success" done for循环(C风格): #!/bin/bash for ((i=1;i<=20;i++)) do useradd user$i &&a

shell基础学习系列一:第一个shell脚本

打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行. 输入一些代码: #!/bin/bash echo "Hello World !" “#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.echo命令用于向窗口输出文本. 运行Shell脚本有两种方法. 作为可执行程序 将上面的代码保存为test.sh,并 cd 到相应目录: chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执