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