如何在Bash脚本中创建新的用户名和密码?

时间:2018-01-15 20:03:29

标签: bash passwords username

我正在尝试创建一个脚本,在该脚本中添加新用户和密码,并在Root中运行时检查该用户和密码是否已存在。

所以,我的脚本运行正常。它只在根目录中运行,并正确检查是否已使用用户名。但是,我似乎无法添加新的用户和密码。以下是我的整个脚本:

#!/bin/bash
#Creating a script that creates a new user

ROOT_UID=0      #Root has $UID 0
SUCCESS=0
E_USEREXISTS=70
E_NOTROOT=65        #Not root

#Run as root, and this checks to see if the creater is in root. If not, will not run
if [ "$UID" -ne "$ROOT_UID" ]; then
    echo "Sorry must be in root to run this script"
    exit $E_NOTROOT
fi

if [ $# -eq 2 ]; then
username=$1
pass=$2

grep -q "$username" /etc/passwd

if [ $? -eq $SUCCESS ]; then
    echo "User $username already exists"
    echo "Please choose another username"
    exit $E_USEREXISTS 
fi

echo $pass | passwd $username --stdin
echo "the account is setup"

else
    echo "this program needs 2 arguments and you have given $#"
    echo "you have to call the script $0 username and the pass"
fi

exit 0

我没有得到一个直接的错误,但这是一个正在发生的事情的例子: 我尝试添加某人(用户名然后密码):

[root@localhost Documents]# ./Script dkong 123bif

响应是:

passwd: Unknown user name 'dkong'
the account is setup

有人可以帮我指点吗?我希望它创建一个新的用户名和密码,我不明白为什么不是。

我使用脚本已经有一段时间了,所以如果答案显而易见,我很抱歉!只需要一点方向。提前谢谢!

3 个答案:

答案 0 :(得分:3)

没关系!我搞定了! 这是我的解决方案:

useradd $username -d /home/$username -m ;
echo $passwd | passwd $username --stdin;
echo "the account is setup"

答案 1 :(得分:1)

错误在于,您需要在检查该行已经存在之后将用户名添加到/ etc / passwd' grep -q" $ username" / etc / passwd的' 因此,您只需添加该行' useradd $ username'  在第二个if条件之后 正好在该行之前' echo $ pass | passwd $ username --stdin' 发生错误是因为您告诉passwd为已经存在的用户设置密码

答案 2 :(得分:0)

首先,永远不要对用户变量使用完整的大写标识符,因为它们保留用于shell环境。

所以

ROOT_UID=0

应该是

root_uid=0 # and so on

创建用户名需要useradd命令。它会自动执行后台检查以查看用户是否已经存在,如果是,则中止该过程,您只需检查命令的退出状态以查看用户创建是否成功。

您可以将用户名作为参数传递给脚本,但从安全角度来看,将密码作为纯文本传递并不好。 Linux密码存储为哈希值。散列算法可以是MD5,SHA-512等。您需要使用提及herecrypt函数来帮助useradd处理存储哈希密码。

下面是我的剧本

#!/bin/bash
# Checking pre-requirements, the script should contain one argument
[ -z "$1" ] && echo "Usage : script user_name" && exit 1
username=$1
# Read password key and has silently using -s ie keystrokes are invisible
read -sp 'Enter password key - ' key
# Typically ask for a confirmation, but omitted for the sake of brevity
# I suppose you default password hash algorithm is MD5

# You need some characters for a salt. Read the content in link mentioned above
read -sp 'Read upto 8 characters for salt - ' salt
# You can sanitize the user input for salt to trim its length to 8 and use it like below
useradd -m -d /home/$username \
-p $(perl -e 'print crypt("$ARGV[0]", "\$1\$$ARGV[1]")' "$username" "${salt:0:8}")
# Check the exit status of the last command
[ $? -eq 0 ] && echo "User $username successfully created" || \
echo "Sorry ! User $username couldn't be created at the moment"