我需要能够在我的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
所以,你更改密码的用户username
来new_password
.
你也可以使用chpasswd:
echo username:new_password | chpasswd
所以,你更改密码的用户username
来new_password
.
您可以运行passwd命令并将其发送到管道输入.所以,做一些像:
echo thePassword | passwd theUsername --stdin
我问自己同样的事情,并不想依赖Python脚本.
这是在一个bash行中添加具有已定义密码的用户的行:
useradd -p $(openssl passwd -1 $PASS) $USER
下面的代码在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
我喜欢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
单引号应该足够了.
以下适用于我,并在Ubuntu 14.04上进行了测试.它是一个不需要任何用户输入的单线程.
sudo useradd -p $(openssl passwd -1 $PASS) $USERNAME
取自@Tralemonkey
您可以使用-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),))
单线程用于创建具有主目录和密码的sudo用户.
useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}
--stdin
不适用于Debian.它说:
`passwd: unrecognized option '--stdin'`
这对我有用:
#useradd $USER #echo "$USER:$SENHA" | chpasswd
在这里,我们可以找到一些其他好方法:
http://www.debian-administration.org/articles/668
您可以在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"