You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Server下Shell脚本调用OpenSSL读取CSV批量生成证书问题

批量生成OpenSSL用户证书实现方案

核心逻辑是逐行解析CSV内容,跳过表头行后将各字段动态传入OpenSSL的-subj参数,同时避免生成的证书、密钥文件重名覆盖。

字段对应关系

先明确CSV字段和OpenSSL证书主题字段的映射规则:

  • CSV Country 字段 → 证书国家字段 /C=
  • CSV place 字段 → 证书省份/州字段 /ST=
  • CSV city 字段 → 证书城市字段 /L=
  • CSV company 字段 → 证书组织字段 /O=
  • CSV nameuser 字段 → 证书通用名字段 /CN=
  • CSV email 字段 → 证书邮箱字段 /emailAddress=

可直接运行的完整脚本

#!/bin/bash
# 配置项:指定你的CSV文件路径
CSV_PATH="user_list.csv"
# 可选:指定证书输出目录,不存在则自动创建
OUTPUT_DIR="./user_certs"
mkdir -p "$OUTPUT_DIR"

# 校验CSV文件是否存在
if [ ! -f "$CSV_PATH" ]; then
    echo "错误:指定的CSV文件不存在,请检查路径配置"
    exit 1
fi

line_count=0
# 逐行读取CSV内容,兼容最后一行无换行符的情况
while IFS=',' read -r Country place city company nameuser email || [ -n "$Country" ]; do
    line_count=$((line_count + 1))
    # 跳过第一行表头
    if [ $line_count -eq 1 ]; then
        continue
    fi

    # 去除字段首尾多余的空白字符
    Country=$(echo "$Country" | xargs)
    place=$(echo "$place" | xargs)
    city=$(echo "$city" | xargs)
    company=$(echo "$company" | xargs)
    nameuser=$(echo "$nameuser" | xargs)
    email=$(echo "$email" | xargs)

    # 校验必填字段非空
    if [ -z "$Country" ] || [ -z "$nameuser" ] || [ -z "$email" ]; then
        echo "警告:第${line_count}行必填字段缺失,已跳过"
        continue
    fi

    echo "正在生成用户【${nameuser}】的证书..."
    # 动态传入参数生成证书,以用户名作为文件名避免覆盖
    openssl req -x509 \
        -newkey rsa:4096 \
        -keyout "${OUTPUT_DIR}/${nameuser}.key" \
        -out "${OUTPUT_DIR}/${nameuser}.crt" \
        -days 365 \
        -nodes \
        -subj "/C=${Country}/ST=${place}/L=${city}/O=${company}/CN=${nameuser}/emailAddress=${email}"

    if [ $? -eq 0 ]; then
        echo "用户【${nameuser}】证书生成完成"
    else
        echo "错误:用户【${nameuser}】证书生成失败(行号:${line_count})"
    fi
done < "$CSV_PATH"

echo "所有记录处理完成,证书已保存至${OUTPUT_DIR}目录"

使用说明

  • 将脚本中CSV_PATH的值修改为你实际存放用户信息的CSV文件路径
  • 给脚本添加可执行权限:chmod +x script.sh
  • 执行脚本即可批量生成:./script.sh

适配特殊场景的调整建议

  • 如果CSV中nameuser字段存在/、空格等特殊字符导致文件名异常,可将输出文件名替换为行号或邮箱命名,例如"${OUTPUT_DIR}/user_${line_count}.key"
  • 如果CSV字段值本身包含逗号(字段通常会用双引号包裹),可安装csvkit工具,用csvread命令替代原生IFS拆分逻辑,避免字段解析错位
  • 如需调整证书有效期、密钥长度,直接修改脚本中-days、rsa:4096对应的参数值即可

内容的提问来源于stack exchange,提问作者Jota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:27:19