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

当前回答

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

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

摘自@Tralemonkey

其他回答

我也问过自己同样的问题,但不想依赖Python脚本。

这是在一个bash行中添加一个具有已定义密码的用户的行:

useradd -p $(openssl passwd -crypt $PASS) $USER

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

——stdin在Debian上不起作用。它说:

`passwd: unrecognized option '--stdin'`

这招对我很管用:

#useradd $USER
#echo "$USER:$SENHA" | chpasswd

在这里我们可以找到一些其他的好方法:

http://www.debian-administration.org/articles/668

对于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

Tralemonkey的解决方案几乎也适用于我……但事实并非如此。我最后是这样做的:

echo -n '$#@password@#$' | passwd myusername --stdin

他的解决方案没有包括2个关键细节,-n防止echo在加密的密码中添加\n,在我的例子中,单引号保护内容不被shell (bash)解释。

顺便说一句,我在CentOS 5.6系统上以root身份运行这个命令,以防有人想知道。