ter*_*don 14
有一个应用程序!作为软件包newusers一部分的工具passwd旨在批量创建用户:
DESCRIPTION
The newusers command reads a file (or the standard input by default)
and uses this information to update a set of existing users or to
create new users. Each line is in the same format as the standard
password file (see passwd(5)) with the exceptions explained below:
Run Code Online (Sandbox Code Playgroud)
您将需要使用以下格式创建一个文件:
username:passwd:UID:GID:full name,room number,work phone,home phone,other:directory:shell
Run Code Online (Sandbox Code Playgroud)
其中许多可以忽略,将使用默认值。您只需要指定用户名和密码。例如:
tom:password1:::::
danny:password2:::::
Run Code Online (Sandbox Code Playgroud)
如果我将其另存为users.txt并运行此命令:
sudo newusers < users.txt
Run Code Online (Sandbox Code Playgroud)
创建用户:
$ grep -E 'tom|danny' /etc/passwd
tom:x:1005:1006:::
danny:x:1006:1007:::
Run Code Online (Sandbox Code Playgroud)
用脚本就可以。这需要一个用户和密码以逗号分隔的文件:
while IFS="," read -r user passwd ; do
echo "useradd -m -p $(mkpasswd "$passwd") $user"
done < /home/$USER/Downloads/users.txt
Run Code Online (Sandbox Code Playgroud)
mkpasswd 可以安装 sudo apt-get install whois将此另存为users.sh并设置权限chmod +x users.sh
如果你那么做
./users.sh > users_create.sh
Run Code Online (Sandbox Code Playgroud)
你会得到一个包含所有命令的文本文件,以便你可以验证它并
chmod +x users.sh
./users_create.sh
Run Code Online (Sandbox Code Playgroud)
然后将创建它们。
测试
示例文件:
wdn,password123
wdn2,password345
Run Code Online (Sandbox Code Playgroud)
在“~/Downloads”中保存为“users.txt”。
执行脚本:
./users.sh
useradd -m -p acBNi2tbw9iaw wdn
useradd -m -p OHOzeMGqbcMso wdn2
Run Code Online (Sandbox Code Playgroud)
和
./users.sh > users_create.sh
~/Downloads$ more users_create.sh
useradd -m -p Q1BVotdoA3ucI wdn
useradd -m -p siUX7mYTYw.3A wdn2
Run Code Online (Sandbox Code Playgroud)
(密码已加密)。
在这之后你需要做的就是执行这个可执行文件chmod +x users.sh并执行它./users_create.sh(我没有做最后一点,所以如果不起作用请评论)。
这是一个 awk 单行:
sudo awk -F',' '{ command="useradd -p $( mkpasswd "$2" ) "$1;print command; system(command) }' userlist.txt
或者为了可读性,这里是格式:
sudo awk -F',' '{
command="useradd -p $(mkpasswd "$2 ")" $1;
print command;
system(command)
}' userlist.txt
Run Code Online (Sandbox Code Playgroud)
说明:
awk 的system函数允许在 awk 处理文本文件中的条目时运行 shell 命令。我们创建了一个变量“命令”,它只是我们想要运行的命令的文本。使用逗号作为字段分隔符-F',',我们将字段 #2 和 #1 放置到匹配 useradd 命令的语法中。一旦汇编了命令的文本, system(command)useradd -p $(mkpasswd password) username将针对文本的每一行执行。print command部分是可选的,仅用于调试和验证是否已处理所有用户名
添加:
oneliner 可以像这样变成 awk 脚本:
#!/usr/bin/awk -f
BEGIN {FS=",";}
{
command="useradd -p $(mkpasswd "$2") " $1;
print command;
system( command )
}
Run Code Online (Sandbox Code Playgroud)
现在确保脚本具有可执行权限sudo chmod +x script-name.awk并使用任何输入文件运行它,sudo ./awkscript.sh userlist.txt如果它在您当前的工作目录中,或者您可以通过将其放入$PATH目录之一来调用该脚本的任何位置
可能,在密码中
考虑到密码中有逗号的可能性,我建议您使用sub()函数。子函数更改每行中字符或单词的第一个实例。换句话说,如果我们有一个条目,例如testuser,foo,bar,foo,bar密码在哪里,并且我们将第一个条目更改为空格,我们可以正常使用 awk ,而无需告诉它使用-F','标志。Awk 会将每个条目转换为testuser foo,bar,并将 testuser 视为 $1,将 foo,bar 视为 $2。将其放入代码中:
sudo awk '{ sub(","," ");command="useradd -p $( mkpasswd "$2" ) "$1;print command; system(command) }' userlist.txt
这是一个python解决方案:
#!/usr/bin/env python2
import subprocess, crypt
with open('/path/to/file.csv') as f:
for line in f:
i = line.find(',')
name = line[:i]
password = line.rstrip()[i+1:]
encpt_passwd = crypt.crypt(password, '2b')
command = 'useradd -m -p {0} {1}'.format(encpt_passwd, name).split()
subprocess.call(command)
Run Code Online (Sandbox Code Playgroud)
这将处理带有逗号的密码。
line.find(',')将,在文件的每一行中找到最低的索引
line[:i] 将获取包含用户名的行的切片
line.rstrip()[i+1:] 将包含密码
crypt模块从表单的输入生成加密密码crypt.crypt(password, salt)。encpt_passwd将包含加密的密码。在crypt.crypt(password, '2b'),password是保存的普通密码,2b是盐。
subprocess.call(command) 将简单地运行命令来生成用户
| 归档时间: |
|
| 查看次数: |
7559 次 |
| 最近记录: |