1. 程式人生 > >Linux運維常用shell指令碼之使用者管理例項

Linux運維常用shell指令碼之使用者管理例項

1、用shell指令碼批量建立Linux使用者

實現要求:建立使用者student1到student50,指定組為student組!而且每個使用者需要設定一個不同的密碼!

#!/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 使用者名稱】-------------------設定相同的密碼------------------------

#!/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"
$echo "456"
最終輸出 123456
而不是
123
456
    echo -e 處理特殊字元:
        \n 換行且游標移至行首 】 
ok,就這麼一個簡單的指令碼,就可以再系統裡批量生成賬號了。而且密碼跟賬號的名字一樣。
這就是for do done語句用法。

2、批量建立使用者

#!/bin/bash
DATE=$(date +%F_%T)
USER_FILE=user.txt
echo_color(){
    if [ $1 == "green" ]; then
        echo -e "\033[32;40m$2\033[0m"
    elif [ $1 == "red" ]; then
        echo -e "\033[31;40m$2\033[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 "User\tPassword" >> $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 "$USER\t$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 
參考答案: 

#!/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。 
參考指令碼: 

#!/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

修改密碼指令碼:

#!/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 [email protected]$IP
    set timeout 2
    expect {
        \"(yes/no)\" {send \"yes\r\";exp_continue}
        \"password:\" {send \"$PASS\r\";exp_continue}
        \"[email protected]*\" {send \"echo \'$NEW_PASS\' |passwd --stdin $USER\r exit\r\";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 "$username cunzai,bunengxiugaimima"
    else
        echo $password | $passwd
    fi
done < $user_info
其中adduser.txt存的檔案為

username001 password001
username002 password002
username003 password003
username004 password004

方法三、newusers+chpasswd批量新增使用者

1、首先我們建立使用者檔案和密碼檔案;

我們要建立包含新使用者的檔案userfile.txt ;另一個是為新新增的使用者設定密碼的userpwdfile.txt;

[[email protected] ~]# touch userfile.txt
[[email protected] ~]# 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批量新增使用者,此時使用者是沒有密碼的

[[email protected] ~]# newusers userfile.txt

2、執行命令/usr/sbin/pwunconv,將/etc/shadow產生的shadow密碼解碼,然後回寫到/etc/passwd中, 並將/etc/shadow的shadow密碼欄刪掉。這是為了方便下一步的密碼轉換工作,即先取消shadow password功能,關閉影子檔案。

[[email protected] ~]# pwunconv

3、 用chpasswd批量修改密碼
[[email protected] ~]# chpasswd < userpwdfile.txt

4、最後不要忘了恢復影子檔案,保證安全,您可以通過下面的命令來對映到 /etc/shadow檔名

[[email protected] ~]# pwconv

6、批量許可權控制指令碼

設計一個Shell程式,在/userdata目錄下建立50個目錄,即user1~user50,並設定每個目錄的許可權,其中其他使用者的許可權為:讀;檔案所有者的許可權為:讀、寫、執行;檔案所有者所在組的許可權為:讀、執行。 
如下: 

#!/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