如何用脚本批量创建用户账户?

wen 实用脚本 3

我来介绍几种批量创建用户账户的方法,主要针对Linux系统。

如何用脚本批量创建用户账户?

使用Shell脚本批量创建

基础版 - 从用户名列表创建

#!/bin/bash
# bulk_create_users.sh - 批量创建用户
USER_FILE="users.txt"  # 用户名列表文件
DEFAULT_PASS="TempPass123!"  # 默认密码
# 检查是否以root运行
if [[ $EUID -ne 0 ]]; then
   echo "请以root用户运行此脚本"
   exit 1
fi
# 检查用户文件是否存在
if [[ ! -f "$USER_FILE" ]]; then
    echo "用户文件 $USER_FILE 不存在"
    exit 1
fi
# 读取用户名并创建用户
while IFS= read -r username; do
    # 跳过空行和注释
    [[ -z "$username" || "$username" =~ ^# ]] && continue
    # 检查用户是否已存在
    if id "$username" &>/dev/null; then
        echo "用户 $username 已存在,跳过"
        continue
    fi
    # 创建用户
    useradd -m -s /bin/bash "$username"
    # 设置密码
    echo "$username:$DEFAULT_PASS" | chpasswd
    # 强制首次登录修改密码
    passwd -e "$username"
    echo "已创建用户: $username"
done < "$USER_FILE"
echo "批量创建完成!"

user.txt 文件格式

zhangsan
lisi
wangwu
# 这是注释
zhaoliu

进阶版 - 带密码和组管理

#!/bin/bash
# advanced_bulk_create.sh - 高级批量创建
# 用户信息CSV格式: 用户名,密码,组名(可选),全名(可选)
CSV_FILE="users.csv"
DEFAULT_SHELL="/bin/bash"
create_user_with_details() {
    local username="$1"
    local password="$2"
    local group="$3"
    local fullname="$4"
    # 检查用户是否存在
    if id "$username" &>/dev/null; then
        echo "用户 $username 已存在,跳过"
        return
    fi
    # 创建用户,可设置全名和家目录
    if [[ -n "$fullname" ]]; then
        useradd -m -s "$DEFAULT_SHELL" -c "$fullname" "$username"
    else
        useradd -m -s "$DEFAULT_SHELL" "$username"
    fi
    # 设置密码
    echo "$username:$password" | chpasswd
    # 添加到附加组
    if [[ -n "$group" ]]; then
        # 检查组是否存在,不存在则创建
        if ! getent group "$group" &>/dev/null; then
            groupadd "$group"
        fi
        usermod -aG "$group" "$username"
    fi
    # 创建用户的SSH目录(可选)
    mkdir -p /home/$username/.ssh
    chmod 700 /home/$username/.ssh
    chown $username:$username /home/$username/.ssh
    echo "已创建用户: $username (组: $group)"
}
main() {
    # 检查root权限
    if [[ $EUID -ne 0 ]]; then
        echo "请以root用户运行此脚本"
        exit 1
    fi
    # 检查CSV文件
    if [[ ! -f "$CSV_FILE" ]]; then
        echo "CSV文件 $CSV_FILE 不存在"
        echo "格式: 用户名,密码,组名,全名"
        exit 1
    fi
    # 跳过CSV头部,处理数据行
    tail -n +2 "$CSV_FILE" | while IFS=',' read -r username password group fullname; do
        # 去除空格
        username=$(echo "$username" | xargs)
        password=$(echo "$password" | xargs)
        group=$(echo "$group" | xargs)
        fullname=$(echo "$fullname" | xargs)
        # 跳过空用户名
        [[ -z "$username" ]] && continue
        create_user_with_details "$username" "$password" "$group" "$fullname"
    done
    echo "批量创建完成!"
}
main

users.csv 文件格式

用户名,密码,组名,全名
zhangsan,Pass123!,developers,张三
lisi,Pass456!,developers,李四
wangwu,Pass789!,admins,王五

Python脚本版本

#!/usr/bin/env python3
# bulk_create_users.py
import csv
import subprocess
import sys
import os
def check_root():
    """检查是否以root运行"""
    if os.geteuid() != 0:
        print("请以root用户运行此脚本")
        sys.exit(1)
def create_user(username, password=None, group=None, fullname=None):
    """创建单个用户"""
    # 检查用户是否存在
    result = subprocess.run(['id', username], capture_output=True, text=True)
    if result.returncode == 0:
        print(f"用户 {username} 已存在,跳过")
        return False
    # 创建用户命令
    cmd = ['useradd', '-m', '-s', '/bin/bash']
    if fullname:
        cmd.extend(['-c', fullname])
    cmd.append(username)
    # 执行创建
    result = subprocess.run(cmd, capture_output=True, text=True)
    if result.returncode != 0:
        print(f"创建用户 {username} 失败: {result.stderr}")
        return False
    # 设置密码
    if password:
        pwd_cmd = ['chpasswd']
        pwd_input = f"{username}:{password}"
        result = subprocess.run(pwd_cmd, input=pwd_input, 
                              text=True, capture_output=True)
    # 添加到组
    if group:
        subprocess.run(['usermod', '-aG', group, username])
    print(f"已创建用户: {username}")
    return True
def bulk_create_from_csv(csv_file):
    """从CSV文件批量创建用户"""
    # 检查文件
    if not os.path.exists(csv_file):
        print(f"文件 {csv_file} 不存在")
        return
    with open(csv_file, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        for row in reader:
            create_user(
                username=row.get('用户名', '').strip(),
                password=row.get('密码', 'DefaultPass123!'),
                group=row.get('组名', '').strip(),
                fullname=row.get('全名', '').strip()
            )
def main():
    check_root()
    csv_file = sys.argv[1] if len(sys.argv) > 1 else 'users.csv'
    bulk_create_from_csv(csv_file)
    print("批量创建完成!")
if __name__ == '__main__':
    main()

使用现有工具

newusers 命令

# 准备用户信息文件
cat > /tmp/users.txt << EOF
zhangsan:x:1001:1001:张三:/home/zhangsan:/bin/bash
lisi:x:1002:1001:李四:/home/lisi:/bin/bash
wangwu:x:1003:1002:王五:/home/wangwu:/bin/bash
EOF
# 批量创建用户
newusers /tmp/users.txt

使用说明

  1. 准备工作

    # 给脚本执行权限
    chmod +x bulk_create_users.sh
  2. 运行脚本

    # Shell脚本
    sudo ./bulk_create_users.sh

Python脚本

sudo python3 bulk_create_users.py users.csv


3. **验证结果**
```bash
# 查看创建的用户
cat /etc/passwd | grep -E "zhangsan|lisi|wangwu"
# 或使用
getent passwd | grep -E "zhangsan|lisi|wangwu"

安全注意事项

⚠️ 重要提醒:

  • 所有操作必须以root权限运行
  • 生产环境中建议使用安全随机密码
  • 创建后应及时更改默认密码
  • 记录所有创建的用户信息
  • 考虑使用LDAP或AD等集中认证系统

选择哪种方法取决于你的具体需求,对于简单场景推荐使用Shell脚本,复杂场景推荐Python脚本。

抱歉,评论功能暂时关闭!