从CSV文件导入用户
是否可以使用CSV文件导入用户? 或类似LDAP连接导入所有用户?
有一个应用程序! 作为passwd
包的一部分的newusers
工具旨在批量创建用户:
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:
您需要使用以下格式创建文件:
username:passwd:UID:GID:full name,room number,work phone,home phone,other:directory:shell
其中许多可以忽略,并使用默认值。 您只需指定用户名和密码即可。 例如:
tom:password1::::: danny:password2:::::
如果我将其保存为users.txt
并运行此命令:
sudo newusers < users.txt
用户已创建:
$ grep -E 'tom|danny' /etc/passwd tom:x:1005:1006::: danny:x:1006:1007:::
用脚本就可以了。 这需要一个用户和密码commaseparated的文件:
while IFS="," read -r user passwd ; do echo "useradd -m -p $(mkpasswd "$passwd") $user" done < /home/$USER/Downloads/users.txt
- 可以使用
sudo apt-get install whois
安装mkpasswd
- 改变,到; 如果你需要那个。
将其另存为users.sh
并使用chmod +x users.sh
设置权限
如果你这样做
./users.sh > users_create.sh
您将获得包含所有命令的文本文件,以便您可以对其进行validation
chmod +x users.sh ./users_create.sh
然后会创建它们。
测试
示例文件:
wdn,password123 wdn2,password345
在“〜/ Downloads”中保存为“users.txt”。
执行脚本:
./users.sh useradd -m -p acBNi2tbw9iaw wdn useradd -m -p OHOzeMGqbcMso wdn2
和
./users.sh > users_create.sh ~/Downloads$ more users_create.sh useradd -m -p Q1BVotdoA3ucI wdn useradd -m -p siUX7mYTYw.3A wdn2
(密码已加密)。
在此之后,您需要做的就是使用chmod +x users.sh
生成此可执行文件并使用chmod +x users.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
说明 :
当awk处理来自文本文件的条目时,awk的system
函数允许运行shell命令。 我们创建一个变量“命令”,它只是我们想要运行的命令的文本。 使用逗号作为字段分隔符-F','
,我们取字段#2和#1并将它们放置以匹配useradd命令的语法。 一旦组装了命令文本,system(命令)就为文本的每一行执行useradd -p $(mkpasswd password) username
。 print command
部分是可选的,仅用于调试和validation是否已处理所有用户名
加成:
oneliner可以像这样变成一个awk脚本:
#!/usr/bin/awk -f BEGIN {FS=",";} { command="useradd -p $(mkpasswd "$2") " $1; print command; system( command ) }
现在确保脚本具有sudo chmod +x script-name.awk
可执行权限,并使用任何输入文件运行它,如sudo ./awkscript.sh userlist.txt
如果它在您当前的工作目录中,或者您可以调用它将脚本放入$PATH
目录之一的任何地方
可能,
在密码中
考虑到在密码中使用逗号的可能性,我建议你使用sub()
函数。 子函数更改每行中字符或单词的第一个实例。 换句话说,如果我们有一个条目,如testuser,foo,bar
,其中foo,bar
是密码,并且我们将第一个条目更改为空格,我们可以正常使用awk,而不会告诉它使用-F','
flag。 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)
这将处理带有逗号的密码。
-
line.find(',')
将在文件的每一行中找到最低索引 -
line[:i]
将占用包含用户名的行的片段 -
line.rstrip()[i+1:]
将包含密码 -
crypt
模块从crypt.crypt(password, salt)
forms的输入生成加密密码。encpt_passwd
将包含加密密码。 在crypt.crypt(password, '2b')
,password
是保存的普通密码,2b
是salt。 -
subprocess.call(command)
将只运行命令来生成用户
我有一个较短的awk
版本(@Serg =)):
首先安装whois
,我们需要命令mkpasswd
sudo apt-get install whois
比你可以使用这个oneliner:
awk -F',' '{print "Create user: "$1; system("sudo useradd -p $(mkpasswd "$2") "$1)}' users
或没有任何输出:
awk -F',' '{system("sudo useradd -p $(mkpasswd "$2") "$1)}' users
users
内容:
foo,foopasswd bar,password foobar,foobar
用户名在第一列中,第二列中是未加密的密码。
公平地说,我在这里提到了一个问题。 密码不能包含逗号。
我的AWK版本在密码中有问题。 这是我的perl版本:
#!/usr/bin/perl use strict; use warnings; use Text::CSV; my $file = $ARGV[0]; open my $fh, "<", $file or die "$file: $!"; my $csv = Text::CSV->new ({ binary => 1, # Allow special character. Always set this auto_diag => 1, # Report irregularities immediately sep_char => ',' }); while (my $row = $csv->getline ($fh)) { print "User: ".$row->[0]."\n"; print "Password: ".$row->[1]."\n"; my $hashed = crypt($row->[1], "salt"); my $cmd = 'useradd -p '.$hashed.' '.$row->[0]."\n"; system($cmd); } close $fh;
例:
CSV文件users.csv
:
foo,"foopasswd" bar,"password" foobar,"""foo,bar"
启动脚本
% sudo add_users users.csv User: foo Password: foopasswd useradd -p sajllSNct/Wx2 foo User: bar Password: password useradd -p sa3tHJ3/KuYvI bar User: foobar Password: "foo,bar useradd -p saBWMpscG9WvA foobar