我需要能够在我的Linux (Fedora 10)上创建用户帐户,并通过bash脚本自动分配密码(如果需要,也可以采用其他方式)。

通过Bash创建用户很容易,例如:

[whoever@server ]#  /usr/sbin/useradd newuser

是否可以在Bash中分配密码,功能类似于此,但自动:

[whoever@server ]# passwd newuser
Changing password for user testpass.
New UNIX password:
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
[whoever@server ]#

当前回答

您可以使用-p选项。

useradd -p encrypted_password newuser

不幸的是,这需要您自己对密码进行散列(passwd为您完成)。不幸的是,似乎没有一个标准实用程序来散列一些数据,所以您必须自己编写。

这是我编写的一个小Python脚本,用于为您加密。假设你把它命名为pcrypt,然后你可以把上面的命令行写到:

useradd -p $(pcrypt ${passwd}) newuser

这里有几个需要注意的警告。

当pcrypt运行时,任何用户都可以通过ps命令看到明文。 pcrypt使用老式的crypt函数-如果您正在使用更现代的东西,如MD5哈希,您将需要更改pcrypt。

这是pcrypt:

#!/usr/bin/env python

import crypt
import sys
import random

saltchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

def salt():
    return random.choice(saltchars) + random.choice(saltchars)

def hash(plain):
    return crypt.crypt(arg, salt())

if __name__ == "__main__":
    random.seed()
    for arg in sys.argv[1:]:
        sys.stdout.write("%s\n" % (hash(arg),))

其他回答

您可以使用-p选项。

useradd -p encrypted_password newuser

不幸的是,这需要您自己对密码进行散列(passwd为您完成)。不幸的是,似乎没有一个标准实用程序来散列一些数据,所以您必须自己编写。

这是我编写的一个小Python脚本,用于为您加密。假设你把它命名为pcrypt,然后你可以把上面的命令行写到:

useradd -p $(pcrypt ${passwd}) newuser

这里有几个需要注意的警告。

当pcrypt运行时,任何用户都可以通过ps命令看到明文。 pcrypt使用老式的crypt函数-如果您正在使用更现代的东西,如MD5哈希,您将需要更改pcrypt。

这是pcrypt:

#!/usr/bin/env python

import crypt
import sys
import random

saltchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

def salt():
    return random.choice(saltchars) + random.choice(saltchars)

def hash(plain):
    return crypt.crypt(arg, salt())

if __name__ == "__main__":
    random.seed()
    for arg in sys.argv[1:]:
        sys.stdout.write("%s\n" % (hash(arg),))

您可以在bash脚本中使用expect。

从http://www.seanodonnell.com/code/?id=21

#!/usr/bin/expect 
######################################### 
#$ file: htpasswd.sh 
#$ desc: Automated htpasswd shell script 
######################################### 
#$ 
#$ usage example: 
#$ 
#$ ./htpasswd.sh passwdpath username userpass 
#$ 
###################################### 

set htpasswdpath [lindex $argv 0] 
set username [lindex $argv 1] 
set userpass [lindex $argv 2] 

# spawn the htpasswd command process 
spawn htpasswd $htpasswdpath $username 

# Automate the 'New password' Procedure 
expect "New password:" 
send "$userpass\r" 

expect "Re-type new password:" 
send "$userpass\r"

请使用sudo权限运行以下脚本,通过脚本创建用户。

注意:此脚本支持所有linux操作系统,如Redhat, Centos, Ubuntu, suse, kali, Arch, Bitname, BSD....等

#!/bin/bash
#author: bablish jaiswal
#purpos: Linux user creation with a storng password
clear
#echo "Hi, I am a function to create sudo user with strong password. Kindly share following information"
echo -e "\n\n\n"
printf "\e[6;33mHi, I am a function to create sudo user with a strong password. Kindly share following information\e[0m";echo
read -p "user name:- " name #input name
read -p "complete path for $name home directory? example: /home/$name :- " home #user home path
( useradd  -m -d $home $name -s /bin/bash ) > /dev/null 2>&1
pass=$(cat /dev/urandom |tr -dc "[[:graph:]]" |head -c16)
(echo -e "$pass\n$pass" | passwd $name ) > /dev/null 2>&1
echo " "
printf "\e[6;33m-----------------------------Copy below credentials-------------------------\e[0m";echo
echo -e "User:- $name\nHomeDir:- $home\npassword:- $pass"
#svalue=$(cat /etc/sudoers |grep -i root |grep -i all|tail -n1 |awk '{$1=""}1')
svalue=$(cat /etc/sudoers |grep -i root |grep -i all|tail -n1 |awk '{print $2}')
echo "${name} ${svalue} NOPASSWD:ALL" >> /etc/sudoers && echo “Remark:- User $name is a sudo user”

对于RedHat / CentOS,下面是创建用户、添加密码并使用户成为sudoer的代码:

#!/bin/sh
echo -n "Enter username: "
read uname

echo -n "Enter password: "
read -s passwd

adduser "$uname"
echo $uname:$passwd | sudo chpasswd

gpasswd wheel -a $uname

下面的代码可以在Ubuntu 14.04中运行。在其他版本/linux变体中使用它之前请尝试一下。

# quietly add a user without password
adduser --quiet --disabled-password --shell /bin/bash --home /home/newuser --gecos "User" newuser

# set password
echo "newuser:newpassword" | chpasswd