本文目录导读:

我来介绍几种批量创建系统用户的Shell脚本方法:
方法1:使用用户列表文件
准备用户文件
首先创建用户列表文件 users.txt:
user1,123456 user2,abcdef user3,pass123 user4,888888
批量创建脚本
#!/bin/bash
# 批量创建用户脚本
# 使用方法: ./create_users.sh [用户列表文件]
USER_FILE="${1:-users.txt}"
LOG_FILE="/var/log/user_creation.log"
# 检查root权限
if [ "$(id -u)" -ne 0 ]; then
echo "错误:请以root用户运行此脚本"
exit 1
fi
# 检查用户文件是否存在
if [ ! -f "$USER_FILE" ]; then
echo "错误:用户文件 $USER_FILE 不存在"
exit 1
fi
# 创建日志目录
mkdir -p "$(dirname "$LOG_FILE")"
echo "开始批量创建用户... $(date)" | tee -a "$LOG_FILE"
# 逐行读取并创建用户
while IFS=',' read -r username password; do
# 跳过空行和注释行
[ -z "$username" ] && continue
[[ "$username" == \#* ]] && continue
# 删除可能存在的空格
username=$(echo "$username" | tr -d ' ')
password=$(echo "$password" | tr -d ' ')
# 检查用户是否已存在
if id "$username" &>/dev/null; then
echo "用户 $username 已存在,跳过创建" | tee -a "$LOG_FILE"
continue
fi
# 创建用户
useradd -m -s /bin/bash "$username" 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
# 设置密码
echo "$username:$password" | chpasswd 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
echo "成功创建用户: $username" | tee -a "$LOG_FILE"
else
echo "警告:用户 $username 创建成功,但密码设置失败" | tee -a "$LOG_FILE"
fi
else
echo "错误:用户 $username 创建失败" | tee -a "$LOG_FILE"
fi
done < "$USER_FILE"
echo "批量创建用户完成!$(date)" | tee -a "$LOG_FILE"
方法2:使用数组批量创建
#!/bin/bash
# 使用数组批量创建用户
declare -A USERS=(
["alice"]="pass1"
["bob"]="pass2"
["charlie"]="pass3"
["david"]="pass4"
["eve"]="pass5"
)
SUFFIX="" # 可以设置后缀,如 _2024
for username in "${!USERS[@]}"; do
password="${USERS[$username]}"
full_username="${username}${SUFFIX}"
if id "$full_username" &>/dev/null; then
echo "用户 $full_username 已存在"
continue
fi
useradd -m -s /bin/bash "$full_username"
echo "$full_username:$password" | chpasswd
if [ $? -eq 0 ]; then
echo "创建用户 $full_username 成功"
fi
done
方法3:批量创建带额外属性的用户
#!/bin/bash
# 创建带额外属性的用户
USER_FILE="users_advanced.txt"
# 检查权限
if [ $EUID -ne 0 ]; then
echo "请以root身份运行"
exit 1
fi
# 创建用户函数
create_user_with_attrs() {
local username=$1
local password=$2
local group=$3
local uid=$4
local home_dir=$5
# 创建组(如果不存在)
if [ -n "$group" ] && ! getent group "$group" &>/dev/null; then
groupadd "$group"
fi
# 构建useradd命令
local cmd="useradd"
[ -n "$uid" ] && cmd="$cmd -u $uid"
[ -n "$group" ] && cmd="$cmd -g $group"
[ -n "$home_dir" ] && cmd="$cmd -d $home_dir -m"
cmd="$cmd -s /bin/bash $username"
# 执行创建
eval $cmd
if [ $? -eq 0 ]; then
echo "$username:$password" | chpasswd
echo "创建用户 $username 成功"
# 设置密码过期策略
chage -M 90 "$username" # 90天后密码过期
chage -d 0 "$username" # 强制首次登录改密码
fi
}
# 从CSV文件读取用户信息
while IFS=',' read -r username password group uid home_dir; do
[ -z "$username" ] && continue
create_user_with_attrs "$username" "$password" "$group" "$uid" "$home_dir"
done < "$USER_FILE"
方法4:交互式批量创建
#!/bin/bash
# 交互式批量创建用户
# 获取用户数量
read -p "请输入要创建的用户数量: " count
# 验证输入
if ! [[ "$count" =~ ^[0-9]+$ ]] || [ "$count" -le 0 ]; then
echo "请输入有效的正整数"
exit 1
fi
# 用户名前缀
read -p "请输入用户前缀(默认: user): " prefix
prefix=${prefix:-user}
# 初始密码
read -s -p "请输入初始密码: " password
echo
if [ -z "$password" ]; then
password="Default123!" # 默认密码
fi
echo "开始创建 $count 个用户..."
for i in $(seq 1 $count); do
username="${prefix}${i}"
# 创建用户
useradd -m -s /bin/bash "$username" 2>/dev/null
if [ $? -eq 0 ]; then
echo "$username:$password" | chpasswd
echo "创建用户 $username 成功"
else
if id "$username" &>/dev/null; then
echo "用户 $username 已存在"
else
echo "创建用户 $username 失败"
fi
fi
done
echo "创建完成!"
方法5:扩展功能脚本
#!/bin/bash
# 功能完善的批量创建用户脚本
CONFIG_FILE="/etc/user_batch_config"
LOG_FILE="/var/log/user_batch_$(date +%Y%m%d).log"
BACKUP_DIR="/root/user_backups"
# 日志函数
log() {
local level=$1
local message=$2
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message" | tee -a "$LOG_FILE"
}
# 备份系统用户文件
backup_user_files() {
mkdir -p "$BACKUP_DIR"
local backup_file="$BACKUP_DIR/users_$(date +%Y%m%d_%H%M%S).tar.gz"
tar -czf "$backup_file" /etc/passwd /etc/shadow /etc/group /etc/gshadow 2>/dev/null
if [ $? -eq 0 ]; then
log "INFO" "系统用户文件备份到: $backup_file"
else
log "WARN" "备份失败"
fi
}
# 验证用户名
validate_username() {
local username=$1
# 只允许小写字母、数字、下划线、连字符
if [[ ! "$username" =~ ^[a-z_][a-z0-9_-]*$ ]]; then
return 1
fi
return 0
}
# 创建用户主函数
create_users_batch() {
local user_file=$1
# 检查root权限
if [ $EUID -ne 0 ]; then
log "ERROR" "需要root权限"
exit 1
fi
# 备份
backup_user_files
# 创建用户
while IFS=':' read -r username password extra; do
# 跳过注释和空行
[[ "$username" =~ ^#.*$ ]] && continue
[ -z "$username" ] && continue
# 验证用户名
if ! validate_username "$username"; then
log "WARN" "无效的用户名: $username"
continue
fi
# 检查用户是否存在
if id "$username" &>/dev/null; then
log "INFO" "用户 $username 已存在,跳过"
continue
fi
# 创建用户和主目录
useradd -m -s /bin/bash -c "Batch created user $username" "$username"
if [ $? -eq 0 ]; then
# 设置密码
if [ -z "$password" ]; then
password=$(openssl rand -base64 12)
fi
echo "$username:$password" | chpasswd
log "INFO" "用户 $username 创建成功"
echo "用户: $username, 密码: $password" >> "$BACKUP_DIR/credentials_$(date +%Y%m%d).txt"
else
log "ERROR" "用户 $username 创建失败"
fi
done < "$user_file"
}
# 生成随机密码
generate_random_password() {
openssl rand -base64 12 | tr -d '/+=' | cut -c1-12
}
# 主程序
main() {
# 创建备份目录
mkdir -p "$BACKUP_DIR"
if [ $# -eq 0 ]; then
echo "用法: $0 <用户文件>"
echo "用户文件格式: username:password 或 username:"
echo "如果密码为空,将自动生成"
exit 1
fi
if [ ! -f "$1" ]; then
echo "文件 $1 不存在"
exit 1
fi
create_users_batch "$1"
log "INFO" "批量创建完成!密码已保存到: $BACKUP_DIR/credentials_$(date +%Y%m%d).txt"
}
main "$@"
使用方法
-
基本使用:
# 创建用户列表文件 echo "user1,password1" > users.txt # 运行脚本 sudo ./create_users.sh users.txt
-
常用选项:
# 备份用户文件 sudo ./advanced_create.sh users.txt # 交互式创建 sudo ./interactive_create.sh
-
用户管理命令:
# 查看创建的用户 grep -E '^(user[0-9]+)' /etc/passwd # 删除所有创建的用户 for user in $(awk -F: '{print $1}' created_users.txt); do userdel -r "$user" done
安全建议
-
密码策略:
- 首次登录强制修改密码:
chage -d 0 username - 设置密码过期时间:
chage -M 90 username
- 首次登录强制修改密码:
-
权限控制:
- 仅root用户可执行
- 日志文件权限:
chmod 640 /var/log/user_*.log - 密码文件权限:
chmod 600 /root/*.txt
-
审计:
- 记录所有操作日志
- 定期检查用户状态
- 备份重要配置文件
这些脚本可以根据实际需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播