如何从文本文件中的数据添加用户

如何从文本文件中的数据添加用户

我有一个关于在 Linux 中创建多个用户的问题,但我需要一个程序来处理它。新建一个users.txt文件,内容如下:

adams:5000:Adams, John Couch:/bin/bash
atiyah:5001:Atiyah, Michael:/bin/csh
babbage:5002:Babbage, Charles:/bin/csh
baker:5003:Baker, Alan:/bin/csh
barrow:5004:Barrow, Isaac:/bin/bash

...(文件中有70个用户名)

我想知道如何编写脚本来自动添加这些用户。

答案1

假设您的文件名为file.该脚本将完成以下工作:

USERNAME=$(cat file | cut -d: -f1)
echo "$USERNAME"

ID=$(cat file | cut -d: -f2)
echo "$ID"

USER_SHELL=$(cat file | cut -d, -f2 | cut -d: -f2)
echo "$USER_SHELL"

useradd -m -s "$USER_SHELL" -u "$ID" "$USERNAME"

答案2

这是完成工作的最低限度的脚本。它确保用户名和 uid 都未被使用。它为每个用户创建一个匹配的组(使用 gid=uid) - 它不会检查 gid 或组名称是否已经存在(留给读者作为练习 - 提示: use getent group)。

注意:下面的脚本未经测试,但我之前已经编写过类似的脚本一百万次(稍微夸张)......可能有一些小错误需要修复。

#! /bin/bash
# get newusers file from first arg on cmd line or default to 'newusers.txt'
nf="${1:-newusers.txt}"

# get existing usernames and uids.
names="^($(getent passwd | cut -d: -f1 | paste -sd'|'))$"
 uids="^($(getent passwd | cut -d: -f3 | paste -sd'|'))$"

yesterday=$(date -d yesterday +%Y-%m-%d)
# temp file for passwords
tf=$(mktemp) ; chmod 600 "$tf"

while IFS=: read u uid gecos shell; do
    gid="$uid" ; homedir="/home/$u"
  
    useradd  -e "$yesterday" -m -d "$homedir" -c "$gecos" \
             -u "$uid" -g "$gid" -s "$shell" "$u"

    groupadd -g "$gid" "$u"
  
    # generate a random password for each user..
    p=$(makepasswd)
    echo "$u:$p" >> "$tf"
done < <(awk -F: '$1 !~ names && $2 !~ uids' names="$names" uids="$uids" "$nf")

# uncomment to warn about users not created:
#echo Users not created because the username or uid already existed: >&2
#awk -F: '$1 ~ names || $2 ~ uids' names="$names" uids="$uids" "$nf" >&2    

# uncomment the cat to display the passwords in the terminal
echo ; echo "passwords are saved in $tf"
# cat "$tf"

# set passwords using `chpasswd:
chpasswd < "$tf"

如果未安装,请使用pwgenmakepassword或任何类似程序。makepasswd或者编写您自己的连接 4 个以上随机 5 个以上字母的单词,以获得一个易于记住的密码,长度至少为 20 个字符 - 将一些单词大写并在每个单词之间插入随机的 1-3 位数字和/或标点符号以使密码均匀更长并增加暴力搜索空间。随机密码生成已经被重新发明了很多次。

您可以打印出用户名和密码(来自"$tf")并将它们切成条状(在每条之间保留一些空行user:password)以提供给每个用户。告诉他们立即更改密码并销毁纸条。密码设置为过期"$yesterday"(需要 GNU date),因此用户第一次登录 shell 时应提示其更改密码。

答案3

有一种更简单的方法可以在批处理模式下从文件添加或更新用户:命令newusers(8),该命令由阴影工具开关。该工具套件至少应作为 Debian 及其衍生版本的软件包提供。它在我正在使用的 Arch Linux 中可用。

有关如何使用它的信息,请参阅man newusers

相关内容