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

当前回答

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

其他回答

您可以运行passwd命令并向其发送管道输入。所以,你可以这样做:

echo thePassword | passwd theUsername --stdin

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

我喜欢Tralemonkey的方法echo thePassword | passwd theUsername—stdin,虽然它不太适合我写的。然而,这对我来说很有效。

echo -e "$password\n$password\n" | sudo passwd $user

-e是将\n识别为新行。

sudo是Ubuntu的根权限。

双引号用于识别$并展开变量。

上面的命令两次将密码和新行传递给passwd,这是passwd所需要的。

如果不使用变量,我认为这可能可行。

echo -e 'password\npassword\n' | sudo passwd username

单引号在这里就足够了。

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

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

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

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

请使用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”