从 CSV 文件导入用户

从 CSV 文件导入用户

是否可以使用 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

第一列是用户名,第二列是未加密的密码。


公平地说,我在这里提到一个问题。密码不能包含逗号。

相关内容