当前位置:  开发笔记 > 编程语言 > 正文

如何使用Bash脚本自动添加用户帐户和密码?

如何解决《如何使用Bash脚本自动添加用户帐户和密码?》经验,为你挑选了10个好方法。

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

小智.. 189

你也可以使用chpasswd:

echo username:new_password | chpasswd

所以,你更改密码的用户usernamenew_password.



1> 小智..:

你也可以使用chpasswd:

echo username:new_password | chpasswd

所以,你更改密码的用户usernamenew_password.


+1,这是工作的正确工具:`$ apropos chpasswd` ...`chpasswd(8) - 以批处理模式更新密码

2> 小智..:

您可以运行passwd命令并将其发送到管道输入.所以,做一些像:

echo thePassword | passwd theUsername --stdin


这不适用于ubuntu 12.04或debian 6.0.5.
--stdin在较新的Linux系统中已被弃用.请改用chpasswd.
@MarkusOrreilly可以使用,但是在使用像Ansible这样的配置工具时却没有.正如@Nybble所说,你应该使用chpasswd.所以这是有效的:`echo'myuser:mypass'| chpasswd`.希望有所帮助.
我不得不做`echo -e"密码\npassword \n"| passwd`于13.04
该方法的好处是它是安全的(假设`echo`是在使用的shell中内置的,它通常是),至少关于`/ proc /`.

3> Damien..:

我问自己同样的事情,并不想依赖Python脚本.

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

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


`useradd -p $(openssl passwd -1 $ PASS)$ USER`更现代,因为反向标记被弃用,建议使用`$()`.
你也可以加密密码:`useradd -m -p $(openssl passwd -1 -salt $ SALT $ PASS)`.我认为这在以后的Ubuntu上是必需的.

4> Ying..:

下面的代码在Ubuntu 14.04中有效.在其他版本/ linux变体中使用它之前尝试一下.

# quietly add a user without password
adduser --quiet --disabled-password --shell /bin/bash --home /home/newuser --gecos "User" newuser

# set password
echo "newuser:newpassword" | chpasswd


http://en.wikipedia.org/wiki/Gecos_field gecos字段或GECOS字段是Unix上/ etc/passwd文件中的条目,以及类似的操作系统.它通常用于记录有关帐户或其用户的一般信息,例如他们的真实姓名和电话号码.GECOS指通用电气综合操作系统,当GE的大型系统部门出售给霍尼韦尔时,该系统已更名为GCOS.
我不明白`--gecos`

5> Paul S..:

我喜欢Tralemonkey的方法echo thePassword | passwd theUsername --stdin虽然它对我来说并不像我所写的那样.这对我有用.

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

-e是承认\n新线.

sudo 是Ubuntu的root访问权限.

双引号用于识别$和扩展变量.

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

如果不使用变量,我认为这可能有效.

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

单引号应该足够了.


在bash中精美地工作.但是,如果在sh中运行,则-e选项不起作用.我发现它实际输出"-e"的困难方式.幸运的是,-e选项在sh中是不必要的,转义是默认的.便携版本是使用printf"password \npassword \n"| ......而是.

6> cevaris..:

以下适用于我,并在Ubuntu 14.04上进行了测试.它是一个不需要任何用户输入的单线程.

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

取自@Tralemonkey


这对我来说也适用于Dockerfile.

7> R Samuel Kla..:

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


perl -e'print crypt($ ARGV [0],"password")''mypassword'

8> Sandeep..:

单线程用于创建具有主目录和密码的sudo用户.

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



9> Roger..:

--stdin不适用于Debian.它说:

`passwd: unrecognized option '--stdin'`

这对我有用:

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

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

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



10> Carlos Tasad..:

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有