我需要能够在我的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 ]#

当前回答

./my_add_user.sh用户PASSWD

代码:

#!/bin/bash
# my_add_user.sh

if [ "$#" -lt 2 ] 
 then
       echo "$0 username passwd"
       exit
fi

user=$1
passwd=$2

useradd $user -d /data/home/$user  -m  ;
echo $passwd | passwd $user --stdin;

其他回答

下面是我在Ubuntu 14.04上测试的。它是一个不需要任何用户输入的一行程序。

sudo useradd -p $(openssl passwd -1 $PASS) $USERNAME

摘自@Tralemonkey

您可以使用-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),))

这里有一个脚本,将为您.....

如果你愿意,你可以添加一个用户列表(或者只是一个用户),一次完成,每个用户都有不同的密码。作为奖励,脚本的末尾会显示每个用户的密码. ....如果您愿意,您可以添加一些用户维护选项

如:

chage -m 18 $user
chage -M 28 $user

到将设置密码年龄等的脚本。

= = = = = = =

#!/bin/bash

# Checks if you have the right privileges
if [ "$USER" = "root" ]
then

# CHANGE THIS PARAMETERS FOR A PARTICULAR USE
PERS_HOME="/home/"
PERS_SH="/bin/bash"

   # Checks if there is an argument
   [ $# -eq 0 ] && { echo >&2 ERROR: You may enter as an argument a text file containing users, one per line. ; exit 1; }
   # checks if there a regular file
   [ -f "$1" ] || { echo >&2 ERROR: The input file does not exists. ; exit 1; }
   TMPIN=$(mktemp)
   # Remove blank lines and delete duplicates 
   sed '/^$/d' "$1"| sort -g | uniq > "$TMPIN"

   NOW=$(date +"%Y-%m-%d-%X")
   LOGFILE="AMU-log-$NOW.log"

   for user in $(more "$TMPIN"); do
      # Checks if the user already exists.
      cut -d: -f1 /etc/passwd | grep "$user" > /dev/null
      OUT=$?
      if [ $OUT -eq 0 ];then
         echo >&2 "ERROR: User account: \"$user\" already exists."
         echo >&2 "ERROR: User account: \"$user\" already exists." >> "$LOGFILE"
      else
         # Create a new user
         /usr/sbin/useradd -d "$PERS_HOME""$user" -s "$PERS_SH" -m "$user"
         # passwdgen must be installed
         pass=$(passwdgen -paq --length 8)
         echo $pass | passwd --stdin $user
         # save user and password in a file
         echo -e $user"\t"$pass >> "$LOGFILE"
         echo "The user \"$user\" has been created and has the password: $pass"
      fi
   done
   rm -f "$TMPIN"
   exit 0
else
   echo >&2 "ERROR: You must be a root user to execute this script."
   exit 1
fi

===========

希望这能有所帮助。

欢呼, 卡路

您可以在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"

来自IBM (https://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.cmds1/chpasswd.htm):)

创建一个文本文件,输入text.txt,并按如下方式填充用户:密码对:

user1:password1
user2:password2
...
usern:passwordn

保存“text.txt”文件并运行

cat text.txt | chpassword

就是这样。该解决方案是(a)可伸缩的,(b)不需要在命令行上打印密码。