cat << 'EOF' > cert_factory_interactive.sh #!/bin/bash # ========================================== # 跳板机 SSL 证书申请工厂 (交互版) # ========================================== # --- 1. 交互式输入 --- echo "----------------------------------------------------" read -p "请输入您要申请的域名 (例如: ui.shanghi.net): " DOMAIN echo "----------------------------------------------------" # 空值检查 if [ -z "$DOMAIN" ]; then echo "❌ 错误:域名不能为空,脚本已退出。" exit 1 fi # --- 2. 关键提醒 (跳板机模式专用) --- echo "⚠️ 【重要提醒】 ⚠️" echo "您正在使用跳板机模式。在继续之前,请务必确认:" echo "👉 域名 [$DOMAIN] 的 DNS 解析目前必须指向本机 IP!" echo " (拿到证书后,您再改回 NAT 机器的 IP)" echo "" read -p "确认解析已生效?按回车继续 (或按 Ctrl+C 取消)..." # --- 3. 环境准备 --- CERT_DIR="/data" mkdir -p "$CERT_DIR" echo "[1/3] 正在检查环境与清理端口..." # 安装 socat if ! command -v socat &> /dev/null; then echo " -> 安装 socat..." if [ -f /usr/bin/apt ]; then apt update && apt install socat -y >/dev/null; fi if [ -f /usr/bin/yum ]; then yum install socat -y >/dev/null; fi fi # 清理 80 端口 (防止 Nginx 等占用) if lsof -Pi :80 -sTCP:LISTEN -t >/dev/null ; then echo " -> 发现 80 端口被占用,正在释放..." fuser -k 80/tcp >/dev/null 2>&1 fi # 开放防火墙 iptables -I INPUT -p tcp --dport 80 -j ACCEPT >/dev/null 2>&1 # --- 4. 开始申请 --- echo "[2/3] 正在向 CA 机构申请证书 (需等待几秒)..." ~/.acme.sh/acme.sh --issue -d "$DOMAIN" --standalone --force # --- 5. 结果处理 --- if [ $? -eq 0 ]; then echo "[3/3] 申请成功!正在导出文件..." # 安装证书到 /data 目录 ~/.acme.sh/acme.sh --install-cert -d "$DOMAIN" \ --key-file "$CERT_DIR/$DOMAIN.key" \ --fullchain-file "$CERT_DIR/$DOMAIN.crt" echo "" echo "🎉 ======================================= 🎉" echo " 证书申请成功!已保存到本机 /data" echo "===========================================" echo "📂 私钥 (Key): $CERT_DIR/$DOMAIN.key" echo "📄 公钥 (Crt): $CERT_DIR/$DOMAIN.crt" echo "===========================================" echo "💡 下一步提示:" echo "现在您可以把这两个文件复制到您的 NAT 机器上了。" echo "scp -P <端口> $CERT_DIR/$DOMAIN.* root@:/您的路径/" echo "===========================================" else echo "" echo "❌ 申请失败!" echo "常见原因:" echo "1. 域名解析还没生效,或者解析的不是这台机器的 IP。" echo "2. 云服务商的安全组(防火墙)没有放行 80 端口。" fi EOF # 赋予权限并运行 chmod +x cert_factory_interactive.sh ./cert_factory_interactive.sh