Mod*_*try 187 linux bash passwd
我需要能够在我的Linux(Fedora 10)上创建用户帐户,并通过bash脚本自动分配密码(如果需要,可以自动分配密码).
通过Bash创建用户很容易,例如:
[whoever@server ]# /usr/sbin/useradd newuser
Run Code Online (Sandbox Code Playgroud)
是否可以在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 ]#
Run Code Online (Sandbox Code Playgroud)
小智 189
你也可以使用chpasswd:
echo username:new_password | chpasswd
Run Code Online (Sandbox Code Playgroud)
所以,你更改密码的用户username来new_password.
小智 115
您可以运行passwd命令并将其发送到管道输入.所以,做一些像:
echo thePassword | passwd theUsername --stdin
Run Code Online (Sandbox Code Playgroud)
Dam*_*ien 76
我问自己同样的事情,并不想依赖Python脚本.
这是在一个bash行中添加具有已定义密码的用户的行:
useradd -p $(openssl passwd -1 $PASS) $USER
Run Code Online (Sandbox Code Playgroud)
Yin*_*ing 51
下面的代码在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
Run Code Online (Sandbox Code Playgroud)
Pau*_*l S 29
我喜欢Tralemonkey的方法echo thePassword | passwd theUsername --stdin虽然它对我来说并不像我所写的那样.这对我有用.
echo -e "$password\n$password\n" | sudo passwd $user
Run Code Online (Sandbox Code Playgroud)
-e是承认\n新线.
sudo 是Ubuntu的root访问权限.
双引号用于识别$和扩展变量.
上面的命令将密码和新行传递两次passwd,这就是passwd需要的.
如果不使用变量,我认为这可能有效.
echo -e 'password\npassword\n' | sudo passwd username
Run Code Online (Sandbox Code Playgroud)
单引号应该足够了.
cev*_*ris 23
以下适用于我,并在Ubuntu 14.04上进行了测试.它是一个不需要任何用户输入的单线程.
sudo useradd -p $(openssl passwd -1 $PASS) $USERNAME
Run Code Online (Sandbox Code Playgroud)
取自@Tralemonkey
R S*_*hko 13
您可以使用-p选项.
useradd -p encrypted_password newuser
Run Code Online (Sandbox Code Playgroud)
不幸的是,这确实需要您自己散列密码(passwd会为您执行此操作).不幸的是,似乎没有标准实用程序来散列某些数据,因此您必须自己编写.
这是一个Python脚本,我掀起来为你做加密.假设您将其命名为pcrypt,那么您可以将上面的命令行写入:
useradd -p $(pcrypt ${passwd}) newuser
Run Code Online (Sandbox Code Playgroud)
需要注意的几个警告.
这是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),))
Run Code Online (Sandbox Code Playgroud)
单线程用于创建具有主目录和密码的sudo用户.
useradd -m -p $(openssl passwd -1 ${PASSWORD}) -s /bin/bash -G sudo ${USERNAME}
Run Code Online (Sandbox Code Playgroud)
--stdin不适用于Debian.它说:
`passwd: unrecognized option '--stdin'`
Run Code Online (Sandbox Code Playgroud)
这对我有用:
#useradd $USER
#echo "$USER:$SENHA" | chpasswd
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以找到一些其他好方法:
您可以在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"
Run Code Online (Sandbox Code Playgroud)
我知道我是在这一年之后来的,但我不敢相信没有人建议使用 usermod。
usermod --password `perl -e "print crypt('password','sa');"` root
Run Code Online (Sandbox Code Playgroud)
见鬼,万一有人想在较旧的 HPUX 上执行此操作,您可以使用usermod.sam.
/usr/sam/lbin/usermod.sam -F -p `perl -e "print crypt('password','sa');"` username
Run Code Online (Sandbox Code Playgroud)
-F 仅当执行脚本的人是当前用户时才需要。当然,您不需要使用 Perl 来创建哈希。您可以在其位置使用 openssl 或许多其他命令。
小智 5
我已经在自己的 shell 脚本中进行了测试。
$new_username表示新创建的用户$new_password表示新密码echo "$new_password" | passwd --stdin "$new_username"
Run Code Online (Sandbox Code Playgroud)
echo "$new_username:$new_password" | chpasswd
Run Code Online (Sandbox Code Playgroud)
echo -e "$new_password\n$new_password" | passwd "$new_username"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
343608 次 |
| 最近记录: |