我来介绍几种批量创建用户账户的方法,主要针对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
使用说明
-
准备工作
# 给脚本执行权限 chmod +x bulk_create_users.sh
-
运行脚本
# 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脚本。