對於用NIS+NFS+automount來管理服務器羣的管理員來講,給服務器創建帳戶以及HOME目錄是件很痛苦的事情,特別說若是有幾臺HOME目錄掛載服務器。過程其實仍是比較簡單的,先在NIS主服務器上創建帳戶,添加掛載路徑到auto.home文件中。而後再將帳戶同步到slave NIS服務器上,再而後再登陸HOME目錄服務器,在其上上創建用戶的HOME目錄,拷貝環境腳本,更改目錄owner權限。整個過程是件很使人鬱悶的事情。bash
乾脆就來用腳原本一步到位吧。小小腳本,內容粗俗不堪,不成敬意。服務器
個人設置環境以下:ssh
上海是NIS服務器, 也爲上海用戶的HOME服務器,IP:192.168.0.2ide
深圳使用上海NIS帳戶,自動掛載本地HOME目錄。IP: 192.168.1.2函數
上海與深圳之間已經設置了免ROOT密碼輸入。spa
HOME目錄所處路徑都爲: /mnt/homerest
自動掛載HOME的NIS文件: /etc/auto.home日誌
#!/bin/sh server
################################################ ci
######## define variable ########
################################################
HOME="/mnt/home"
DATE=`date +%F-%R`
SOFTWAREGID="502" #新添加用戶的GID
SHENZHEN_IP="192.168.1.2" #深圳服務器IP地址
SHANGHAI_IP="192.168.0.2" #上海服務器IP地址
LOGFILE="/tmp/logfile.txt" #臨時的日誌文件。
INITIAL_PASSWD="Linux2010" #初始化密碼
SHENZHEN_BACK_DIRECTORY="/backup/nisdatabase_backup" #用來保存上海的密碼文件到深圳。
######===================================######
###### the global function defination ######
######===================================######
######## read input variable ########
create_account_input()
{
echo "What's the username need created:"
read USERNAME ##新用戶的用戶名
echo "which site it is?[shanghai/shenzhen]:"
while read LOCATION ##新用戶是使用上海,仍是深圳服務器。
do
case $LOCATION in ##添加個判斷
shanghai)
break;;
shenzhen)
break;;
*)
echo "Wrong site, please try again"
;;
esac
done
echo "What's the USERID: "
read USERID #新用戶的UID
}
######## create home function ########
mkdir_home_directory() ##創建HOME目錄函數。
{
case "$LOCATION" in
shanghai)
if [ ! -d $HOME/$USERNAME ]
then
mkdir $HOME/$USERNAME
cp /etc/skel/.* $HOME/$USERNAME
chown -R $USERID $HOME/$USERNAME
else
exit 1
fi
;;
shenzhen)
ssh $SHENZHEN_IP "mkdir $HOME/$USERNAME"
ssh $SHENZHEN_IP "cp /etc/skel/.* $HOME/$USERNAME"
ssh $SHENZHEN_IP "chown -R $USERID $HOME/$USERNAME"
;;
*)
echo "Seems the wrong server site, please check \
if it's shanghai or shenzhen. "
break
;;
esac
}
######## create home function ########
add_to_homefile() ##添加到auto.home中。
{
case "$LOCATION" in
shanghai)
echo "##### add new user $USERNAME at $DATE by carywu ####" >> /etc/auto.home
echo "$USERNAME 10.18.11.242:/mnt/home/&" >> /etc/auto.home
;;
shenzhen)
ssh $SHENZHEN_IP "echo '##### add new user $USERNAME at $DATE by carywu' >> /etc/auto.home"
ssh $SHENZHEN_IP "echo '$USERNAME 10.28.8.10:/mnt/home/&' >> /etc/auto.home"
;;
esac
}
######## update nis function ########
update_nis() ##同步nis帳戶函數
{
cd /var/yp
make
#/etc/init.d/nis restart
echo "we are going to backup system account to shenzhen server......"
scp /etc/auto.home root@$SHENZHEN_IP:$SHENZHEN_BACK_DIRECTORY/auto.home_back_$DATE
scp /etc/passwd root@$SHENZHEN_IP:$SHENZHEN_BACK_DIRECTORY/passwd_back_$DATE
scp /etc/shadow root@$SHENZHEN_IP:$SHENZHEN_BACK_DIRECTORY/shadow_back_$DATE
scp /etc/group root@$SHENZHEN_IP:$SHENZHEN_BACK_DIRECTORY/group_back_$DATE
# ssh $SHENZHEN_IP "/etc/init.d/nis restart"
}
######## create account ########
create_account() ##添加帳戶函數
{
echo "Begin to create account for new user......"
useradd -u $USERID -g $SOFTWAREGID -M -s /bin/bash -p $INITIAL_PASSWD $USERNAME
echo "Begin to create home directory......"
mkdir_home_directory
echo "Begin to create home automount......"
add_to_homefile
update_nis
echo "update NIS database finished......"
}
create_samba_account() ##添加samba帳戶函數
{
case "$LOCATION" in
shanghai)
echo "Begin to create samba user...... "
(echo $INITIAL_PASSWD; echo $INITIAL_PASSWD ) |smbpasswd -s -a $USERNAME
echo "Checking samba user $USERNAME......"
smbclient -L 127.0.0.1 -U $USERNAME%$INITIAL_PASSWD
;;
shenzhen)
echo "Begin to create samba user......"
ssh $SHENZHEN_IP "(echo $INITIAL_PASSWD; echo $INITIAL_PASSWD ) |smbpasswd -s -a $USERNAME "
echo "Checking samba user $USERNAME......"
smbclient -L $SHENZHEN_IP -U $USERNAME%$INITIAL_PASSWD
;;
esac
}
create_log_mail() ## 添加郵件內容函數
{
echo "Your Linux account is: $USERNAME " >> $LOGFILE
echo "Your Initial password is: $INITIAL_PASSWD " >> $LOGFILE
echo "Your Initial samba password is: $INITIAL_PASSWD " >> $LOGFILE
if [ $LOCATION == "shanghai" ]
then
echo "The Linux server is: $SHANGHAI_IP " >> $LOGFILE
else
echo "The Linux server is: $SHENZHEN_IP " >> $LOGFILE
fi
echo "####################################### " >> $LOGFILE
echo "NOTE: You can type yppasswd to change the initial Linux password, \
or type smbpasswd to change the initial samba password. \
please let me know if you have any question about the server.\
my mail address is: cary.wu@example.com " >> $LOGFILE
}
send_mail() #發送郵件函數
{
SUBJECT=" Your Linux Account"
FROM="cary.wu@example.com"
echo "Do U wanna send mail? [y/n]:"
read ANSWER
if [ $ANSWER == "y" ]
then
mail -s "$SUBJECT" -r $FROM $USERNAME\@example.com < $LOGFILE
rm $LOGFILE
else
rm $LOGFILE
fi
}
create_account_input && create_account && create_samba_account && create_log_mail && send_mail