#!/usr/bin/env python3
"""
光湖语言系统 · SSH 密钥生成器
Guanghu Language System · SSH Key Generator

用途: 在本地生成 SSH 密钥对 → 公钥部署到服务器 → 私钥存入保险库
一次生成 · 多服务器共用 · 替代 Gatekeeper HTTP 拐弯

用法: python3 generate-ssh-key.py
"""

import os, subprocess, sys
from pathlib import Path

KEY_DIR = Path.home() / ".guanghu" / "ssh"
KEY_NAME = "guanghu_direct"
KEY_PATH = KEY_DIR / KEY_NAME
PUB_PATH = KEY_DIR / f"{KEY_NAME}.pub"


def run():
    print("=" * 60)
    print("  光湖语言系统 · SSH 密钥对生成")
    print("=" * 60)

    # 1. 创建目录
    KEY_DIR.mkdir(parents=True, exist_ok=True)
    os.chmod(KEY_DIR, 0o700)

    # 2. 检查是否已存在
    if KEY_PATH.exists():
        ans = input(f"\n⚠️  {KEY_PATH} 已存在，覆盖？[y/N] ")
        if ans.lower() != "y":
            print("→ 跳过，使用已有密钥")
            show_keys()
            return

    # 3. 输入密码（用于加密私钥，和保险库同一个密码）
    print("\n🔐 输入保险库密码（用于加密私钥）:")
    pw = input("  密码: ").strip()
    if not pw or len(pw) < 8:
        print("❌ 密码至少8位")
        sys.exit(1)

    # 4. 生成 Ed25519 密钥对
    print(f"\n🔑 生成 Ed25519 密钥对...")
    result = subprocess.run([
        "ssh-keygen",
        "-t", "ed25519",
        "-f", str(KEY_PATH),
        "-N", pw,           # 用密码加密私钥
        "-C", "guanghu-direct-ssh"
    ], capture_output=True, text=True)

    if result.returncode != 0:
        print(f"❌ 生成失败: {result.stderr}")
        sys.exit(1)

    os.chmod(KEY_PATH, 0o600)
    os.chmod(PUB_PATH, 0o644)

    # 5. 显示结果
    print(f"\n✅ 密钥对生成成功!\n")
    print(f"  私钥: {KEY_PATH}")
    print(f"  公钥: {PUB_PATH}")
    print()

    show_keys()


def show_keys():
    """显示公钥内容"""
    pub = PUB_PATH.read_text().strip()
    print(f"📤 公钥（发给我部署到服务器）:\n")
    print(f"  {pub}")
    print(f"\n  --- 复制上面这行发给我 ---")
    print()
    print(f"📥 私钥位置: {KEY_PATH}")
    print(f"   （留在本地，不要发给任何人）")
    print()
    print(f"🔐 连接服务器:")
    print(f"   ssh -i {KEY_PATH} root@<服务器IP>")


if __name__ == "__main__":
    run()
