有時候在初始化shell腳本中希望能順便創建用戶並指定密碼,使用useradd命令可以達到該效果:
useradd -m -p encryptedPassword username
參數說明:
- -m : 自動建立用戶的登入目錄;
- -p encryptedPassword : 加密后的密碼, 方法crypt()的返回值.
- username 需要添加的用戶名
怎么生成一個加密密碼:
使用perl的crypt()方法即可加密明文密碼,示例如下:
$ perl -e 'print crypt("password", "salt"),"\n"'
輸出如下:
sa3tHJ3/KuYvI
對於useradd命令需要用到的加密密碼,使用'password'作為鹽,具體語法如下:
$ password="1YelloDog@"
$ pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
$ echo $pass
paU5t8Al/qf6M
示例shell腳本用於創建用戶:
adduser.sh
#!/bin/bash
# Script to add a user to Linux system
if [ $(id -u) -eq 0 ]; then
read -p "Enter username : " username
read -s -p "Enter password : " password
egrep "^$username" /etc/passwd >/dev/null
if [ $? -eq 0 ]; then
echo "$username exists!"
exit 1
else
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
useradd -m -p $pass $username
[ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
fi
else
echo "Only root may add a user to the system"
exit 2
fi
在root用戶下執行該腳本:
# ./adduser.sh
Enter username : roja
Enter password : HIDDEN
User has been added to system!
附自己使用的一段增加用戶的shell:
...
#如果是生產環境,為了防止明文密碼泄露,可以對shell腳本進行加密
password="py@123"
username="py"
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
useradd -m -p $pass $username
...
參考鏈接:
https://www.cyberciti.biz/tips/howto-write-shell-script-to-add-user.html
