shell脚本 集群批量创建、删除 Linux用户、kerberos实体、hdfs用户并校验的脚本

技能点

$# 		:参数个数
-ne 		:判断条件,不等于 not equals
exit 1 		:从当前位置退出脚本
$2 		:第二个参数
grep -w 	:精确查询
wc -l		:统计个数
A=`command`	:将command结果复制给A,`为键盘1左边的按钮

# 注意判断中多个条件 [[ 之间 和 ]] 之间不能有空格
if [[ $A -ne 0  ]] && [[ $B -ne 0 ]]

# 创建组、创建用户并指定组、无交互修改密码
groupadd $1;useradd -g $1 $2;echo "$3" | passwd --stdin $2

注释很清楚,不做多余解释了,直接上脚本,如果有疑问可以通过篇末联系方式添加企鹅共同探讨!

1.创建脚本

#! /bin/bash
current=$(date "+%Y-%m-%d %H:%M:%S")
echo 操作时间 : $current
echo 操作内容 : $1 $2 $3
echo 在线IP : `w | grep root | awk '{print $3}' | awk '!a[$1]++{print}'
# 参数判断,参数要等于3,否则退出,参数依次为 组名、用户名、密码
if [ $# -ne 3 ]
then
        echo  "ABNORMAL NUMBER OF PARAMETERS"
        exit 1
fi

# Linux 用户和Kerberos 实体都存在则退出
A=`grep -w $2 /etc/passwd | wc -l`
B=`kadmin.local -q "list_principals" | grep -w $2/[email protected] | wc -l`
if [[ $A -ne 0  ]] && [[ $B -ne 0 ]]
then
        echo  "USER ALREADY EXIST"
        exit 1
fi

# Kerberos 实体存在则退出
#B=`kadmin.local -q "list_principals" | grep -w $2/[email protected] | wc -l`
#if [ $B -ne 0 ]
#then
#        echo  "KERBEROS PRINCIPAL ALREADY EXIST"
#        exit 1
#fi

# create linux gproup/user/passwd
for i in fan102 fan103 fan104
do
       ssh $i "groupadd $1;useradd -g $1 $2;echo "$3" | passwd --stdin $2"
done

# create kerberos principal
kadmin.local -q "addprinc -pw $3 $2/$1"
kadmin.local -q "xst -k /var/keytab/"$2".keytab $2/[email protected]"

# create hdfs user
kinit -kt /var/keytab/hdfs.keytab hdfs/hdfs
hadoop fs -mkdir /user/$2
hadoop fs -chown $1:$2 /user/$2

# 退出 kerberos 认证
kdestroy

2.删除脚本

#! /bin/bash
# 参数判断,参数要等于2,否则退出,参数依次为 组名、用户名
if [ $# -ne 2 ]
then
        echo  "ABNORMAL NUMBER OF PARAMETERS"
        exit 1
fi

# delete linux user
for i in fan102 fan103 fan104
do
       ssh $i "userdel -r $2"
done

# delete kerberos principal
# yes yes 因为kerberos删除实体时需要校验,这样写可避免等待输入
yes yes | kadmin.local -q "delprinc $2/$1"
rm -rf /var/keytab/"$2".keytab

# delete hdfs user
kinit -kt /var/keytab/hdfs.keytab hdfs/hdfs
hadoop fs -rm -r /user/$2

# 退出 kerberos 认证
kdestroy

3.校验

#! /bin/bash
# 判断所有节点Linux用户是否存在
unum=0
for i in fan102 fan103 fan104
        do
        # ssh到各节点查看是否存在目标用户,不存在r=0,存在r=1
        r=`ssh $i cut -d ":" -f 1 /etc/passwd | grep -w $2 | wc -l`
        # 所有节点上目标用户个数做累加
        unum=$(($unum+$r))
        done
A=$unum
if [ $A -lt 3 ];
then
        A=0
else
        A=1
fi

# 判断kerberos实体是否存在
k=`kadmin.local -q "list_principals" | grep -w $2/[email protected] | wc -l`
if [ $k -eq 0  ];
then
        B=0
else
        B=1
fi

# 判断hdfs用户是否存在
kinit -kt /var/keytab/hdfs.keytab hdfs/hdfs
# hadoop自带判断文件存在脚本 
hadoop fs -test -e /user/$2
# $? 表示最后一次执行的命令的返回状态 0 代表存在 1代表不存在
if [ $? -ne 0 ] ;then
        C=0
else
        C=1
fi
kdestroy

echo $A$B$C
# 输出结果
#if [[ $A -eq 1 ]] && [[ $B -eq 1 ]] && [[ $C -eq 1 ]]
#then 
#       echo "200" 
#else
#       echo "100" 
#fi

4. 调用

#! /bin/bash
if [[ $1 = "create" ]] && [[ $# -eq 4 ]]
then
        G=$2
        U=$3
        optuser.sh $1 $2 $3 $4 >> /var/log/bigdtbase.log 2>&1
        ckuser.sh $G $U | tee -a /var/log/bigdtbase.log
elif [[ $1 = "create" ]] && [[ $2 = "group" ]]
then
        optuser.sh $1 $2 $3 >> /var/log/bigdtbase.log 2>&1
elif [[ $1 = "delete" ]] && [[ $# -eq 3 ]]
then
        G=$2
        U=$3
        optuser.sh $1 $2 $3 >> /var/log/bigdtbase.log 2>&1
        ckuser.sh $G $U | tee -a /var/log/bigdtbase.log
else
        echo 400
fi

+++++++++++++++++++++++++++++++++++++++++
+         如有问题可+Q:1602701980 共同探讨           +
+++++++++++++++++++++++++++++++++++++++++

猜你喜欢

转载自blog.csdn.net/shenyuye/article/details/107696635