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

当前回答

单行程序创建一个带有主目录和密码的sudo用户。

useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}

其他回答

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

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

我在自己的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"

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

我知道我要过几年才会有这个想法,但我不敢相信居然没有人建议用户mod。

usermod --password `perl -e "print crypt('password','sa');"` root

如果有人想在旧的HPUX上执行此操作,您可以使用usermod.sam。

/usr/sam/lbin/usermod.sam -F -p `perl -e "print crypt('password','sa');"` username

只有当执行脚本的人是当前用户时才需要使用-F。当然,您不需要使用Perl来创建散列。您可以使用openssl或许多其他命令来代替它。