Linux运维常用shell脚本之用户管理实例

2022-12-02 14:03:48 浏览数 (2)

1、用shell脚本批量建立Linux用户

实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码!

代码语言:javascript复制
#!/bin/bash
for i in `seq 1 50`
do
    useradd -G student student$i ; 
    echo student$i | passwd student$i --stdin;
done

【脚本实现如下:说明:Linux下 Passwd有参数  --stdin  This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.  所以linux下自动改变用户密码的办法就是:  Echo 密码 |passwd –stdin 用户名】-------------------设置相同的密码------------------------

代码语言:javascript复制
#!/bin/bash
password="123456"
for USER in user1 user2 user3
do
     useradd -m $USER
     echo -e "${password}n${password}" | passwd $USER
done

 【说明:      echo -n 不换行输出: echo -n "123"

2、批量创建用户

代码语言:javascript复制
#!/bin/bash
DATE=$(date  %F_%T)
USER_FILE=user.txt
echo_color(){
    if [ $1 == "green" ]; then
        echo -e "33[32;40m$233[0m"
    elif [ $1 == "red" ]; then
        echo -e "33[31;40m$233[0m"
    fi
}
# 如果用户文件存在并且大小大于0就备份
if [ -s $USER_FILE ]; then
    mv $USER_FILE ${USER_FILE}-${DATE}.bak
    echo_color green "$USER_FILE exist, rename ${USER_FILE}-${DATE}.bak"
fi
echo -e "UsertPassword" >> $USER_FILE
echo "----------------" >> $USER_FILE
for USER in user{1..10}; do
    if ! id $USER &>/dev/null; then
        PASS=$(echo $RANDOM |md5sum |cut -c 1-8)
        useradd $USER
        echo $PASS |passwd --stdin $USER &>/dev/null
        echo -e "$USERt$PASS" >> $USER_FILE
        echo "$USER User create successful."
    else
        echo_color red "$USER User already exists!"
    fi
done

3.批量添加组用户

添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30  参考答案: 

代码语言:javascript复制
#!/bin/sh 
i=1 
groupadd class1 
while [ $i -le 30 ] 
do 
if [ $i -le 9 ] ;then 
USERNAME=stu0${i} 
else
USERNAME=stu${i} 
fi 
useradd $USERNAME 
mkdir /home/$USERNAME 
chown -R $USERNAME /home/$USERNAME 
chgrp -R class1 /home/$USERNAME 
i=$(($i 1)) 
done

4.批量删除用户

实现自动删除50个账号的功能。账号名为stud1至stud50。  参考脚本: 

代码语言:javascript复制
#!/bin/sh 
i=1 
while [ $i -le 50 ] 
do 
userdel -r stud${i} 
i=$(($i 1 )) 
done 

5.批量修改用户密码

旧密码SSH主机信息old_info文件:

#     ip     user    passwd    port 192.168.18.217  root    123456     22 192.168.18.218  root    123456     22

修改密码脚本:

代码语言:javascript复制
#!/bin/bash
OLD_INFO=old_info
NEW_INFO=new_info
for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do
    USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)
    PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)
    PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)
    NEW_PASS=$(mkpasswd -l 8)
    echo "$IP   $USER   $NEW_PASS   $PORT" >> $NEW_INFO
    expect -c "
    spawn ssh -p$PORT $USER@$IP
    set timeout 2
    expect {
        "(yes/no)" {send "yesr";exp_continue}
        "password:" {send "$PASSr";exp_continue}
        "$USER@*" {send "echo '$NEW_PASS' |passwd --stdin $USERr exitr";exp_continue}
    }"
done 

生成新密码new_info文件:

192.168.18.217  root    n8wX3mU%        22 192.168.18.218  root    c87;ZnnL        22

作为一个系统管理员,可能要经常的为机器添加用户,可能是在一台机器上添加很多用户,也有可能是在很多机器上要添加同一个用户。

基本上,批量添加用户有两种方式,一是用useradd passwd命令配合脚本来添加,二是用newusers chpasswd来添加。

第一个方法合适用来在不同的机器上添加不同的用户,或者在同一台机器上添加大量的规则命名的用户。第二个方法可用于在同一台机器上添加大量的用户名单,如将A机上的用户全部添加到B机上。

方法一:useradd passwd命令配合脚本来添加

其中users.list文件内容如下:

johnson lily kelly

执行结果如下图所示:

由脚本知,用户的初始密码被设为用户名 123,大家可以按需修改使用。

方法二、使用while语句

#!/bin/bash user_info=/root/adduser.txt useradd=/usr/sbin/useradd passwd=/usr/bin/passwd cut=/bin/cut while read lines do     username=`echo lines | cut -f1 -d' '`     password=`echo lines | cut -f2 -d' '`     useradd username     if [ ? -ne 0 ];then         echo "password | passwd     fi done <

username001 password001 username002 password002 username003 password003 username004 password004

方法三、newusers chpasswd批量添加用户

1、首先我们创建用户文件和密码文件;

我们要创建包含新用户的文件userfile.txt ;另一个是为新添加的用户设置密码的userpwdfile.txt;

[root@localhost ~]# touch userfile.txt [root@localhost ~]# touch userpwdfile.txt

然后用文本编辑器打开文件userfile.txt,添加如下内容;

win00:x:520:520::/home/win00:/sbin/nologin win01:x:521:521::/home/win01:/sbin/nologin win02:x:522:522::/home/win02:/sbin/nologin win03:x:523:523::/home/win03:/sbin/nologin win04:x:524:524::/home/win04:/sbin/nologin win05:x:525:525::/home/win05:/sbin/nologin win06:x:526:526::/home/win06:/sbin/nologin win07:x:527:527::/home/win07:/sbin/nologin win08:x:528:528::/home/win08:/sbin/nologin win09:x:529:529::/home/win09:/sbin/nologin

userfile.txt 文件内容格式和 /etc/passwd 的格式是一样的,必须严格按照/etc/passwd 的格式来书写;上面所添加的用户都不能登录系统,但完全能用于ftp登录,但您得在相应ftp服务器的配置文件中打开让本地用户有读写权限;如果您想让上面的部份用户可以登录系统,可以把SHELL类似改一改,比如改成/bin/bash ;

我们再来书写新增用户的密码文件userpwdfile.txt内容;这个文件的内容中的用户名要与 userfile.txt用户名相同且严格按照“用户名:密码”的格式来写,一个用户一行;也就是说我们先是添加了win00到win09的用户,现在要为这些用户更新密码;比如下面的;

win00:123456 win01:654321 win02:123321 win03:qweewq win04:google win05:adadwc win06:wsscee win07:xxec32 win08:543wew win09:3ce3wf

2、用newusers批量添加用户,此时用户是没有密码的

[root@localhost ~]# newusers userfile.txt

2、执行命令/usr/sbin/pwunconv,将/etc/shadow产生的shadow密码解码,然后回写到/etc/passwd中, 并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消shadow password功能,关闭影子文件。

[root@localhost ~]# pwunconv

3、 用chpasswd批量修改密码 [root@localhost ~]# chpasswd < userpwdfile.txt

4、最后不要忘了恢复影子文件,保证安全,您可以通过下面的命令来映射到 /etc/shadow文件名

[root@localhost ~]# pwconv

6、批量权限控制脚本

设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。  如下: 

代码语言:javascript复制
#!/bin/sh 
i=1 
while [ i -le 50 ] 
do 
	if [ -d /userdata ];then 
		mkdir -p -m 754 /userdata/user$i   加上-m 754 就不用写下面那一句了  -p 是递归建立目录 
		#chmod 754 /userdata/user$i 
		echo "user$i" 
		let "i = i   1" (或i=$(($i 1)) 
	else 
		mkdir /userdata 
		mkdir -p -m /userdata/user$i 
		#chmod 754 /userdata/user$i 
		echo "user$i" 
		let "i = i   1" (或i=$(($i+1)) 
	fi 
done

0 人点赞