是否可以使用 CSV 文件导入用户?或者使用 LDAP 连接之类的东西来导入所有用户?
答案1
有一个应用程序可以做到这一点!该软件包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:
您需要创建一个具有以下格式的文件:
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:::
答案2
使用脚本就可以。这需要一个以逗号分隔的用户名和密码的文件:
while IFS="," read -r user passwd ; do
echo "useradd -m -p $(mkpasswd "$passwd") $user"
done < /home/$USER/Downloads/users.txt
mkpasswd
可以安装sudo apt-get install whois
- 如果需要,请将 , 更改为 ;。
将其另存为users.sh
并设置权限chmod +x users.sh
如果你这样做
./users.sh > users_create.sh
您将获得一个包含所有命令的文本文件,以便您可以验证它并
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
并执行它./users_create.sh
(我没有做最后一点,所以如果没有用,请发表评论)。
答案3
以下是 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 的system
功能允许在 awk 处理文本文件中的条目时运行 shell 命令。我们创建一个变量“command”,它只是我们要运行的命令的文本。使用逗号作为字段分隔符-F','
,我们取字段 #2 和 #1 并将它们放置在与 useradd 命令的语法相匹配的位置。组装命令文本后,system(command)useradd -p $(mkpasswd password) username
将对文本的每一行执行 ,。print command
部分是可选的,仅用于调试和验证是否已处理所有用户名
添加:
该一行程序可以转换为 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','
标志。Awk 会将每个条目转换为testuser foo,bar
,并将 testuser 视为 $1,将 foo,bar 视为 $2。将其放入代码中:
sudo awk '{ sub(","," ");command="useradd -p $( mkpasswd "$2" ) "$1;print command; system(command) }' userlist.txt
答案4
我有一个较短的awk
版本 (@Serg =)):
首先安装whois
,我们需要命令mkpasswd
sudo apt-get install whois
然后你可以使用这个单行代码:
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
第一列是用户名,第二列是未加密的密码。
公平地说,我在这里提到一个问题。密码不能包含逗号。