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

当前回答

来自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)不需要在命令行上打印密码。

其他回答

在Debian和Red Hat上都可以工作的解决方案。依赖于perl,使用sha-512散列:

cat userpassadd
    #!/usr/bin/env bash

    salt=$(cat /dev/urandom | tr -dc A-Za-z0-9/_- | head -c16)
    useradd -p $(perl -e "print crypt('$2', '\$6\$' . '$salt' . '\$')") $1

用法:

userpassadd jim jimslongpassword

它可以有效地作为一行程序使用,但你必须自己在正确的地方指定密码、盐和用户名:

useradd -p $(perl -e "print crypt('pass', '\$6\$$salt\$')") username

来自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)不需要在命令行上打印密码。

我在自己的shell脚本中进行了测试。

$new_username表示新创建的用户 $new_password表示新密码

是被久远

echo "$new_password" | passwd --stdin "$new_username"

对于 Debian/Ubuntu

echo "$new_username:$new_password" | chpasswd

对于 OpenSUSE

echo -e "$new_password\n$new_password" | passwd "$new_username"

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

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

`passwd: unrecognized option '--stdin'`

这招对我很管用:

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

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

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