# deploy-sshkey **Repository Path**: xledoo/deploy-sshkey ## Basic Information - **Project Name**: deploy-sshkey - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-04 - **Last Updated**: 2025-11-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SSH密钥自动化部署 > 统一管理多台服务器的SSH密钥配置 ## 📋 仓库说明 本仓库用于集中管理服务器SSH密钥和自动化配置脚本,实现: - ✅ 统一的SSH公钥托管 - ✅ 自动化的服务器配置脚本 - ✅ 批量服务器部署能力 --- ## 📁 文件说明 ``` deploy-sshkey/ ├── README.md # 本文档 ├── id_ed25519.pub # SSH公钥文件(Ed25519加密,用于服务器登录) ├── deploy_sshkey.sh # SSH密钥部署脚本 ├── setup_git.sh # Git配置和密钥管理脚本 └── install_claude.sh # Claude Code 安装脚本 ``` ### 文件详情 | 文件 | 用途 | 说明 | |------|------|------| | `id_ed25519.pub` | SSH公钥 | Ed25519加密,所有服务器使用此公钥进行无密码登录 | | `deploy_sshkey.sh` | SSH部署脚本 | 自动下载公钥、配置authorized_keys、禁用密码登录 | | `setup_git.sh` | Git配置脚本 | 安装Git、配置用户信息、创建Gitee/GitHub访问密钥 | | `install_claude.sh` | Claude安装脚本 | 安装Node.js、Claude Code CLI、配置环境变量 | | `deploy-supabase.sh` | Supabase部署脚本 | 自动化部署Supabase到4C8G服务器,包含资源优化配置 | --- ## 🚀 快速开始 ### 方式1: 部署SSH密钥 #### 方式A:非交互式部署(推荐) 一键自动化部署,使用智能默认配置: ```bash # 通过 curl 管道方式(一键运行) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh | sudo bash -s -- --yes # 或下载后执行 curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh -o deploy_sshkey.sh sudo bash deploy_sshkey.sh --yes # 使用 wget wget https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh sudo bash deploy_sshkey.sh --yes ``` **可用参数:** - `--user=` - 要配置SSH密钥的用户名(默认: root) - `--yes` / `-y` - 自动确认所有提示 - `--help` / `-h` - 显示帮助信息 **功能说明:** - 下载SSH公钥并配置到 authorized_keys - 禁用密码登录,只允许密钥登录 - 重启SSH服务使配置生效 - 不包含Git配置(如需Git配置,请使用 setup_git.sh) **示例:** ```bash # 完整自动化部署 curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh | sudo bash -s -- --yes # 为指定用户配置 sudo bash deploy_sshkey.sh --user=ubuntu --yes ``` #### 方式B:交互式部署 如果希望手动输入配置,可以使用交互式方式: ```bash # 方式1:使用命令替换(推荐,无交互问题) bash -c "$(curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh)" # 方式2:使用进程替换 bash <(curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh) # 方式3:下载后执行(最可靠) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh -o deploy_sshkey.sh sudo bash deploy_sshkey.sh ``` ### 方式2: 配置Git和代码托管密钥 #### 方式A:非交互式配置(推荐) 一键自动化配置Git,使用智能默认设置: ```bash # 通过 curl 管道方式(一键运行) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh | sudo bash -s -- --yes # 或下载后执行 curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh -o setup_git.sh sudo bash setup_git.sh --yes # 使用 wget wget https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh sudo bash setup_git.sh --yes ``` **可用参数:** - `--gitusername=` - Git 用户名(默认: xledoo) - `--gitemail=` - Git 邮箱(默认: xledoo@qq.com) - `--yes` / `-y` - 自动确认所有提示 - `--force` - 强制覆盖现有配置 - `--create-github-key` - 同时创建 GitHub 访问密钥 - `--help` / `-h` - 显示帮助信息 **智能默认行为:** - Git 未安装时自动安装,已安装则跳过 - Gitee 密钥未创建时自动创建,已存在则跳过 - 自动配置 SSH config 文件 - 显示公钥提示添加到 Gitee **示例:** ```bash # 完整自动化配置(使用默认配置) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh | sudo bash -s -- --yes # 自定义 Git 用户信息 sudo bash setup_git.sh --gitusername="myname" --gitemail="my@email.com" --yes # 同时创建 GitHub 和 Gitee 密钥 sudo bash setup_git.sh --create-github-key --yes # 强制覆盖现有配置 sudo bash setup_git.sh --force --yes ``` #### 方式B:交互式配置 如果希望手动输入配置,可以使用交互式方式: ```bash # 方式1:使用命令替换(推荐,无交互问题) bash -c "$(curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh)" # 方式2:使用进程替换 bash <(curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh) # 方式3:下载后执行(最可靠) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh -o setup_git.sh sudo bash setup_git.sh ``` ### 方式3: 安装Claude Code #### 方式A:非交互式一键安装(推荐) 使用参数传递配置,支持自动化部署: ```bash # 通过 curl 管道方式(一键运行) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh | sudo bash -s -- --apikey=your_api_key # 或下载后执行 curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh -o install_claude.sh sudo bash install_claude.sh --apikey=your_api_key --yes # 使用 wget wget https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh sudo bash install_claude.sh --apikey=your_api_key --yes ``` **可用参数:** - `--apikey=` - 设置 API Key(必需) - `--baseurl=` - 自定义 Base URL(可选) - `--yes` / `-y` - 自动确认所有提示 - `--force` - 强制重新安装 - `--skip-nodejs` - 跳过 Node.js 安装 - `--skip-claude` - 跳过 Claude Code 安装 - `--help` / `-h` - 显示帮助信息 **示例:** ```bash # 完整自动化安装 curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh | sudo bash -s -- --apikey=sk-ant-xxx --yes # 自定义 Base URL sudo bash install_claude.sh --apikey=sk-ant-xxx --baseurl=https://api.example.com --yes # 强制重新安装 sudo bash install_claude.sh --apikey=sk-ant-xxx --force --yes # 仅配置环境变量(跳过安装) sudo bash install_claude.sh --apikey=sk-ant-xxx --skip-nodejs --skip-claude --yes ``` #### 方式B:交互式安装 如果希望手动输入配置,可以使用交互式方式: ```bash # 方式1:使用命令替换(推荐,无交互问题) bash -c "$(curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh)" # 方式2:使用进程替换 bash <(curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh) # 方式3:下载后执行(最可靠) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh -o install_claude.sh sudo bash install_claude.sh ``` **或使用 wget:** ```bash wget https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh sudo bash install_claude.sh ``` --- ### 方式4: 部署Supabase #### 方式A:非交互式部署(推荐) 一键自动化部署Supabase,优化适配4C8G服务器: ```bash # 通过 curl 管道方式(一键运行) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy-supabase.sh | sudo bash -s -- --yes # 或下载后执行 curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy-supabase.sh -o deploy-supabase.sh sudo bash deploy-supabase.sh --yes # 使用 wget wget https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy-supabase.sh sudo bash deploy-supabase.sh --yes ``` **可用参数:** - `--domain=` - 设置域名(默认: localhost) - `--email=` - 设置管理员邮箱(默认: admin@example.com) - `--install-dir=` - 安装目录(默认: /opt/supabase) - `--swap-size=` - Swap分区大小(默认: 4G) - `--yes` / `-y` - 自动确认所有提示 - `--skip-docker-install` - 跳过Docker安装(需已安装Docker) - `--help` / `-h` - 显示帮助信息 **示例:** ```bash # 自定义域名部署 sudo bash deploy-supabase.sh --domain=example.com --email=admin@example.com --yes # 指定安装目录 sudo bash deploy-supabase.sh --install-dir=/data/supabase --yes # 跳过Docker安装(已提前安装好Docker) sudo bash deploy-supabase.sh --skip-docker-install --yes ``` #### 方式B:交互式部署 手动输入配置选项进行部署: ```bash # 通过 curl 管道方式 bash -c "$(curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy-supabase.sh)" # 或下载后执行 curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy-supabase.sh -o deploy-supabase.sh sudo bash deploy-supabase.sh # 使用 wget wget https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy-supabase.sh sudo bash deploy-supabase.sh ``` --- ## ⚙️ 脚本功能 ### deploy_sshkey.sh - SSH密钥部署 1. **配置SSH登录密钥** - 从本仓库下载公钥:`id_ed25519.pub` - 配置到用户的 `~/.ssh/authorized_keys` - 设置正确的文件权限(700/.ssh, 600/authorized_keys) - **用途**: 本地电脑登录到服务器 2. **强化SSH安全** - ✅ 启用公钥认证 - ❌ 禁用密码认证 - ❌ 禁用PAM认证 - ❌ 禁止Root密码登录 3. **自动重启SSH服务** ### setup_git.sh - Git配置和密钥管理 1. **检查并安装Git** - 自动检测操作系统类型 - 使用对应的包管理器安装Git - 支持:Debian/Ubuntu/CentOS/RHEL/Arch/Alpine等 2. **配置Git用户信息** ```bash # 默认配置 git config --global user.name "xledoo" git config --global user.email "xledoo@qq.com" # 或使用参数自定义 --gitusername="your_name" --gitemail="your@email.com" ``` 3. **创建Gitee访问密钥** - 生成 `~/.ssh/id_ed25519_gitee` 密钥对 - 自动创建SSH config配置文件 - 显示公钥,提示用户添加到Gitee - **用途**: 服务器访问Gitee进行 git clone/pull/push 4. **可选创建GitHub访问密钥** - 生成 `~/.ssh/id_ed25519_github` 密钥对 - 自动配置SSH config文件 - 使用 `--create-github-key` 参数启用 ### install_claude.sh - Claude Code安装 1. **安装Node.js环境** - 自动检测是否已安装Node.js - 使用官方安装脚本安装最新LTS版本 - 可使用 `--skip-nodejs` 跳过 2. **安装Claude Code CLI** - 通过npm全局安装 @anthropic-ai/claude-code - 可使用 `--skip-claude` 跳过 3. **配置环境变量** - 设置 ANTHROPIC_API_KEY - 设置 ANTHROPIC_BASE_URL(可选) - 配置写入 ~/.bashrc 自动加载 ### deploy-supabase.sh - Supabase自动化部署 专为4核心8GB内存服务器优化的Supabase自动化部署脚本。 1. **系统准备** - 检查系统资源(4C8G+) - 安装依赖(curl, git, wget, jq等) - 安装Docker和Docker Compose - 配置Swap分区 - 优化系统内核参数 2. **Supabase部署** - 下载Supabase官方仓库 - 生成安全密钥(JWT_SECRET, ANON_KEY等) - 创建环境配置文件 - 优化资源配置(CPU/内存限制) - 启动并检查服务健康状态 3. **管理工具** - 创建状态查看脚本 - 创建启动/停止/重启脚本 - 创建日志查看脚本 - 创建数据库备份脚本 - 保存所有凭证到安全文件 4. **资源优化** - Postgres: 2核CPU, 3.5GB内存 - Realtime/Analytics: 0.8核CPU, 800MB内存 - 其他服务:按比例分配资源 - 数据库参数调优(shared_buffers, work_mem等) --- ## 📝 详细使用说明 ### 执行流程 #### deploy_sshkey.sh 流程 ``` [Root权限检查] ↓ [下载SSH登录公钥] ← 从本仓库 ↓ [配置authorized_keys] ↓ [修改SSH配置] → 禁用密码登录 ↓ [测试SSH配置] ↓ [重启SSH服务] ↓ [配置完成] ``` #### setup_git.sh 流程 ``` [Root权限检查] ↓ [检查Git] → 未安装则自动安装 ↓ [配置Git用户信息] ← 使用默认值或参数 ↓ [检查Gitee密钥] ├─ 不存在 → [生成 id_ed25519_gitee] → [配置SSH config] → [显示公钥] └─ 已存在 → 跳过 ↓ [是否创建GitHub密钥?] ├─ yes → [生成 id_ed25519_github] → [配置SSH config] → [显示公钥] └─ no → 跳过 ↓ [配置完成] ``` ### 执行示例 #### deploy_sshkey.sh 非交互式示例 ```bash $ curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh | sudo bash -s -- --yes [INFO] 开始SSH密钥自动化部署... [INFO] 运行模式: 非交互式 [INFO] Root权限检查通过 [WARN] 警告: 此操作将: 1. 为用户 root 配置SSH登录公钥 2. 禁用SSH密码登录 3. 重启SSH服务 [WARN] 提示: 如需配置 Git 和代码托管密钥,请使用 setup_git.sh 脚本 [INFO] 自动确认(非交互模式) [INFO] 正在为用户 root 配置SSH密钥... [INFO] 从 https://gitee.com/xledoo/deploy-sshkey/raw/master/id_ed25519.pub 下载公钥... [INFO] 公钥下载成功 [INFO] 用户 root 的SSH密钥配置完成 [INFO] - authorized_keys路径: /root/.ssh/authorized_keys [INFO] - 目录权限: 700 [INFO] - 文件权限: 600 [INFO] 正在配置SSH服务器... [INFO] SSH配置文件已备份到: /etc/ssh/sshd_config.backup.20251105120000 [INFO] SSH配置已更新: [INFO] - 公钥认证: 启用 [INFO] - 密码认证: 禁用 [INFO] - 质询响应认证: 禁用 [INFO] - PAM认证: 禁用 [INFO] - Root密码登录: 禁用 [INFO] 测试SSH配置文件... [INFO] SSH配置文件语法正确 [INFO] 正在重启SSH服务... [INFO] SSH服务已通过systemd重启 ========================================= [INFO] SSH密钥配置完成! ========================================= [WARN] 重要提示: 1. 请确保您的私钥已经保存在本地 2. 请在关闭当前SSH会话前,使用新窗口测试密钥登录 3. 密码登录已被禁用,请妥善保管私钥 4. 如果密钥登录失败,可能需要从控制台访问服务器恢复配置 配置备份位置: - SSH配置: /etc/ssh/sshd_config.backup.* - authorized_keys: ~/.ssh/authorized_keys.backup.* ========================================= ``` #### setup_git.sh 非交互式示例 ```bash $ curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh | sudo bash -s -- --yes [INFO] 开始Git配置和密钥管理... [INFO] 运行模式: 非交互式 [INFO] Root权限检查通过 [INFO] 检查Git安装状态... [INFO] Git 未安装,正在自动安装... [INFO] 检测到Debian/Ubuntu系统,使用apt安装... [INFO] Git安装成功 (版本: 2.34.1) [INFO] 正在配置Git全局用户信息... [INFO] Git全局配置完成: [INFO] - user.name: xledoo [INFO] - user.email: xledoo@qq.com [INFO] 检查Gitee访问密钥... [INFO] Gitee 访问密钥未创建,正在自动创建... [INFO] 正在生成Gitee访问密钥... [INFO] Gitee密钥生成成功 [INFO] 密钥位置: [INFO] - 私钥: /root/.ssh/id_ed25519_gitee [INFO] - 公钥: /root/.ssh/id_ed25519_gitee.pub [INFO] 正在配置SSH config文件... [INFO] SSH config配置完成: /root/.ssh/config ========================================= [WARN] 重要提示: 1. SSH config已自动配置,Git将使用专用密钥访问Gitee 2. 请将以下公钥添加到Gitee SSH密钥设置 3. 访问: https://gitee.com/profile/sshkeys 4. 点击"添加公钥",粘贴以下内容: ------- 公钥开始 ------- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxx... gitee-xledoo@qq.com ------- 公钥结束 ------- 5. 测试连接: ssh -T git@gitee.com ========================================= [INFO] Git配置和密钥管理完成! ``` --- ## 🔐 安全说明 ### ⚠️ 重要警告 1. **私钥安全** - SSH登录私钥(`id_ed25519`)未上传到本仓库 - Gitee访问私钥(`id_ed25519_gitee`)保存在服务器本地 - 请妥善保管所有私钥文件 - 建议将SSH登录私钥保存在至少2个安全位置 2. **密码登录禁用** - 脚本执行后,服务器将**禁用密码登录** - 只能通过SSH密钥登录 - 丢失私钥将无法登录服务器 3. **测试验证** - 在关闭当前SSH会话前,务必在新窗口测试密钥登录 - 确认能正常登录后再关闭原会话 ### SSH登录密钥使用 ```bash # 在本地机器上使用SSH登录私钥 ssh -i ~/.ssh/id_ed25519 root@server_ip # 或配置 ~/.ssh/config Host myserver HostName server_ip User root IdentityFile ~/.ssh/id_ed25519 # 然后直接使用 ssh myserver ``` --- ## 🔑 Gitee访问密钥使用 ### 密钥分离策略 本脚本支持两种密钥的分离管理: | 密钥类型 | 用途 | 私钥位置 | 公钥位置 | |---------|------|---------|---------| | **SSH登录密钥** | 本地电脑 → 服务器 | 本地 `~/.ssh/id_ed25519` | 服务器 `~/.ssh/authorized_keys` | | **Gitee访问密钥** | 服务器 → Gitee | 服务器 `~/.ssh/id_ed25519_gitee` | Gitee SSH密钥设置 | ### 使用Gitee访问密钥 #### 1. 添加公钥到Gitee 脚本生成密钥后会显示公钥,按提示操作: ```bash 1. 访问 https://gitee.com/profile/sshkeys 2. 点击"添加公钥" 3. 粘贴脚本显示的公钥内容 4. 点击"确定" ``` #### 2. SSH配置(自动完成) 脚本已自动创建 `~/.ssh/config` 配置文件,内容如下: ```bash # Gitee配置 - 自动生成 Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee PreferredAuthentications publickey ``` > ✅ **无需手动操作**: 脚本会自动检测并配置,如果已存在gitee.com配置则跳过 #### 3. 测试Gitee连接 ```bash # 测试SSH连接 ssh -T git@gitee.com # 预期输出 # Hi 用户名! You've successfully authenticated, but GITEE.COM does not provide shell access. ``` #### 4. 使用Git操作 ```bash # 克隆仓库 git clone git@gitee.com:xledoo/your-repo.git # 拉取更新 cd your-repo git pull # 推送代码 git add . git commit -m "update" git push ``` ### 如果不创建Gitee密钥 如果选择不创建Gitee访问密钥,有两种方式访问Gitee: #### 方式1: 使用HTTPS(推荐) ```bash # 克隆时使用HTTPS git clone https://gitee.com/xledoo/your-repo.git # 需要输入用户名和密码(或Personal Access Token) ``` #### 方式2: 手动上传登录私钥(不推荐) ```bash # 从本地上传私钥到服务器 scp ~/.ssh/id_ed25519 root@server_ip:~/.ssh/ # 设置权限 ssh root@server_ip "chmod 600 ~/.ssh/id_ed25519" ``` **⚠️ 安全风险**: 共享私钥会降低安全性,不推荐使用。 --- ## 📦 批量部署 ### 部署到多台服务器 ```bash # 创建服务器列表 cat > servers.txt < ⚠️ **必须输入**: 如果为空会提示重新输入,直到输入有效值 --- ## 🧪 测试验证 ### 验证SSH密钥登录 ```bash # 测试能否使用密钥登录 ssh -i ~/.ssh/id_ed25519 root@server_ip # 应该无需密码直接登录 ``` ### 验证密码登录已禁用 ```bash # 尝试不使用密钥登录(应该失败) ssh -o PubkeyAuthentication=no root@server_ip # 预期输出: Permission denied (publickey). ``` ### 验证Git配置 ```bash # 在服务器上检查 git config --global --list # 应显示: # user.name=xledoo # user.email=xledoo@qq.com ``` --- ## 💡 执行方式说明 ### 三种脚本执行方式的区别 #### 1️⃣ 命令替换方式(推荐) ```bash bash -c "$(curl -fsSL https://example.com/script.sh)" ``` **原理**: - `$(curl ...)` 先下载整个脚本内容到字符串 - 然后 `bash -c "内容"` 执行这个字符串 - bash 的 stdin 仍然连接到终端 **优势**: - ✅ 完美支持交互式输入 - ✅ 无需任何特殊处理 - ✅ 与 1Panel 等成熟项目使用相同的方式 **适用场景**:交互式脚本的首选方式 #### 2️⃣ 管道方式 ```bash curl -fsSL https://example.com/script.sh | bash -s -- --yes ``` **原理**: - curl 的输出通过管道传递给 bash - bash 的 stdin 被重定向到管道 **注意**: - ⚠️ 无法直接进行交互式输入 - ⚠️ 需要脚本内部使用 `exec < /dev/tty` 重定向 - ✅ 适合传递参数的非交互式运行 **适用场景**:非交互式自动化部署 #### 3️⃣ 下载后执行(最可靠) ```bash curl -fsSL https://example.com/script.sh -o script.sh bash script.sh ``` **优势**: - ✅ 最简单直接 - ✅ 完美支持交互式输入 - ✅ 可以检查脚本内容后再执行 - ✅ 适合所有场景 **适用场景**:对安全性要求高,或网络不稳定的环境 --- ## 🔍 故障排查 ### 问题1: Claude Code 安装失败 **问题描述**:安装 Claude Code 时出现错误或超时 **解决方案**: ```bash # 方案1:使用非交互式安装(推荐) curl -fsSL https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh | sudo bash -s -- --apikey=your_key --yes # 方案2:如果已安装但配置错误,使用 --force 强制重新安装 sudo bash install_claude.sh --apikey=your_key --force --yes # 方案3:手动验证 npm 安装 npm list -g @anthropic-ai/claude-code ``` ### 问题1B: 环境变量未生效 **问题描述**:安装完成后,执行 `claude` 命令提示找不到 API Key **解决方案**: ```bash # 1. 加载环境变量 source ~/.bashrc # 2. 验证环境变量 echo $ANTHROPIC_API_KEY echo $ANTHROPIC_BASE_URL # 3. 如果环境变量为空,重新配置 sudo bash install_claude.sh --apikey=your_key --force --yes ``` ### 问题2: 无法下载公钥 **检查网络连接** ```bash curl -I https://gitee.com/xledoo/deploy-sshkey/raw/master/id_ed25519.pub ``` ### 问题3: SSH服务重启失败 **手动重启SSH** ```bash sudo systemctl restart sshd # systemd sudo service sshd restart # sysvinit ``` ### 问题4: 被锁定在服务器外 **通过云服务商控制台恢复** ```bash # 恢复密码登录 sudo nano /etc/ssh/sshd_config # 将 PasswordAuthentication no 改为 yes sudo systemctl restart sshd ``` --- ## 🛠️ SSH密钥管理常用操作 ### 生成SSH密钥 ```bash # 生成Ed25519密钥(推荐,更安全) ssh-keygen -t ed25519 -C "your_email@example.com" # 生成RSA密钥(兼容性更好) ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 指定密钥文件名(避免覆盖现有密钥) ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_gitee -C "gitee@example.com" ``` ### SSH连接测试 ```bash # 测试SSH连接 ssh -T git@gitee.com ssh -T git@github.com # 测试服务器连接 ssh root@server_ip # 使用指定密钥连接 ssh -i ~/.ssh/id_ed25519 root@server_ip # 详细输出调试信息 ssh -vvv root@server_ip ``` ### known_hosts管理 ```bash # 删除特定主机的记录(服务器密钥变更时使用) ssh-keygen -R hostname_or_ip ssh-keygen -R gitee.com ssh-keygen -R 192.168.1.100 # 添加主机密钥到known_hosts(避免首次连接提示) ssh-keyscan -t rsa,ed25519 gitee.com >> ~/.ssh/known_hosts ssh-keyscan -t rsa,ed25519 github.com >> ~/.ssh/known_hosts # 查看主机密钥指纹 ssh-keyscan -t ed25519 gitee.com | ssh-keygen -lf - # 清空known_hosts(不推荐,会失去安全保护) > ~/.ssh/known_hosts ``` > **⚠️ 注意**: > - `known_hosts` 用于验证服务器身份,防止中间人攻击 > - 不要频繁删除整个文件,会降低安全性 > - 服务器密钥变更时,只删除特定主机记录即可 ### SSH配置文件管理 ```bash # 编辑SSH配置文件 vim ~/.ssh/config # 配置示例:便捷登录服务器 Host myserver HostName 192.168.1.100 User root IdentityFile ~/.ssh/id_ed25519 Port 22 # 配置示例:Gitee专用密钥 Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee PreferredAuthentications publickey # 配置示例:跳板机 Host jumpserver HostName jump.example.com User admin IdentityFile ~/.ssh/id_rsa Host targetserver HostName 10.0.0.100 User root ProxyJump jumpserver ``` **使用配置后的快捷连接**: ```bash ssh myserver # 自动使用配置的参数 ssh targetserver # 自动通过跳板机连接 ``` ### 查看和管理SSH密钥 ```bash # 查看公钥内容 cat ~/.ssh/id_ed25519.pub # 查看私钥指纹 ssh-keygen -lf ~/.ssh/id_ed25519 # 列出SSH agent中的密钥 ssh-add -l # 添加密钥到SSH agent ssh-add ~/.ssh/id_ed25519 # 从SSH agent中删除所有密钥 ssh-add -D # 查看服务器上的authorized_keys cat ~/.ssh/authorized_keys ``` ### 修复密钥权限 ```bash # SSH对权限要求严格,权限不对会拒绝连接 # 修复.ssh目录权限 chmod 700 ~/.ssh # 修复私钥权限(只有所有者可读写) chmod 600 ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519_gitee # 修复公钥权限 chmod 644 ~/.ssh/id_ed25519.pub # 修复authorized_keys权限 chmod 600 ~/.ssh/authorized_keys # 修复config权限 chmod 600 ~/.ssh/config # 批量修复权限 chmod 700 ~/.ssh chmod 600 ~/.ssh/* chmod 644 ~/.ssh/*.pub ``` ### 复制公钥到服务器 ```bash # 使用ssh-copy-id(推荐,自动设置权限) ssh-copy-id -i ~/.ssh/id_ed25519.pub root@server_ip # 手动复制(需要密码登录) cat ~/.ssh/id_ed25519.pub | ssh root@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" # Windows PowerShell复制 type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@server_ip "cat >> ~/.ssh/authorized_keys" # 验证公钥已添加 ssh root@server_ip "cat ~/.ssh/authorized_keys" ``` ### 多密钥管理 ```bash # 为不同服务使用不同密钥 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C "github@example.com" ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_gitee -C "gitee@example.com" ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_server -C "server@example.com" # 在~/.ssh/config中配置不同密钥 Host github.com IdentityFile ~/.ssh/id_ed25519_github Host gitee.com IdentityFile ~/.ssh/id_ed25519_gitee Host myserver IdentityFile ~/.ssh/id_ed25519_server ``` ### 密钥转换 ```bash # 从私钥生成公钥(公钥丢失时使用) ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub # 更改密钥密码 ssh-keygen -p -f ~/.ssh/id_ed25519 # 移除密钥密码(设置为空) ssh-keygen -p -f ~/.ssh/id_ed25519 ``` ### 安全建议 ```bash # 1. 使用强密码保护私钥(生成时设置) ssh-keygen -t ed25519 -C "your_email@example.com" # 提示输入密码时,设置一个强密码 # 2. 定期轮换密钥(建议每年更换) # 生成新密钥 → 添加到服务器 → 测试 → 删除旧密钥 # 3. 备份私钥到安全位置 # 加密备份私钥 tar czf - ~/.ssh/id_ed25519 | openssl enc -aes-256-cbc -e > ssh_key_backup.tar.gz.enc # 解密恢复私钥 openssl enc -aes-256-cbc -d -in ssh_key_backup.tar.gz.enc | tar xzf - # 4. 限制authorized_keys中的密钥权限 # 在authorized_keys中添加限制(仅允许特定命令) command="rsync --server" ssh-ed25519 AAAAC3Nza... backup@example.com ``` ### 快速参考命令 ```bash # 生成密钥 ssh-keygen -t ed25519 -C "email@example.com" # 复制公钥到服务器 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server # 测试连接 ssh -T git@gitee.com # 清除主机密钥 ssh-keygen -R gitee.com # 添加主机密钥 ssh-keyscan -t rsa,ed25519 gitee.com >> ~/.ssh/known_hosts # 查看公钥 cat ~/.ssh/id_ed25519.pub # 修复权限 chmod 700 ~/.ssh && chmod 600 ~/.ssh/* && chmod 644 ~/.ssh/*.pub ``` --- ## 📊 支持的系统 | 操作系统 | 包管理器 | 状态 | |---------|---------|------| | Ubuntu | apt | ✅ 支持 | | Debian | apt | ✅ 支持 | | CentOS | yum | ✅ 支持 | | RHEL | yum/dnf | ✅ 支持 | | Fedora | dnf | ✅ 支持 | | AlmaLinux | dnf | ✅ 支持 | | Rocky Linux | dnf | ✅ 支持 | | Arch Linux | pacman | ✅ 支持 | | Manjaro | pacman | ✅ 支持 | | openSUSE | zypper | ✅ 支持 | | Alpine | apk | ✅ 支持 | --- ## 📚 相关链接 - **Gitee仓库**: https://gitee.com/xledoo/deploy-sshkey - **公钥Raw地址**: https://gitee.com/xledoo/deploy-sshkey/raw/master/id_ed25519.pub - **脚本Raw地址**: - deploy_sshkey.sh: https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy_sshkey.sh - setup_git.sh: https://gitee.com/xledoo/deploy-sshkey/raw/master/setup_git.sh - install_claude.sh: https://gitee.com/xledoo/deploy-sshkey/raw/master/install_claude.sh - deploy-supabase.sh: https://gitee.com/xledoo/deploy-sshkey/raw/master/deploy-supabase.sh --- ## 🎯 最佳实践 ### 1. 定期更新密钥 ```bash # 生成新密钥对(Ed25519) ssh-keygen -t ed25519 -C "xledoo@qq.com" # 更新仓库中的公钥 git clone git@gitee.com:xledoo/deploy-sshkey.git cd deploy-sshkey cp ~/.ssh/id_ed25519.pub . git add id_ed25519.pub git commit -m "更新SSH公钥" git push # 重新在所有服务器上执行配置脚本 ``` ### 2. 团队协作 ```bash # 合并多个团队成员的公钥 cat member1.pub member2.pub member3.pub > id_ed25519.pub git add id_ed25519.pub git commit -m "添加团队成员公钥" git push ``` ### 3. 日志记录 ```bash # 记录脚本执行日志 sudo bash deploy_sshkey.sh 2>&1 | tee ssh_setup_$(date +%Y%m%d_%H%M%S).log ``` --- ## 📄 许可证 本项目供个人和企业内部使用。 --- ## 👤 维护者 **xledoo** - Email: xledoo@qq.com - Gitee: https://gitee.com/xledoo --- ## 📝 更新日志 ### v1.4 (2025-11-19) **新增功能:** - ✅ **Supabase 自动化部署脚本**:新增 `deploy-supabase.sh`,专为4C8G服务器优化 - 一键部署Supabase全栈平台 - 自动安装和配置Docker环境 - 生成安全密钥和配置文件 - 优化资源分配(CPU/内存限制) - 创建管理脚本(状态查看、日志、备份等) - 支持自定义域名和安装目录 - ✅ **支持非交互式部署**:提供参数化配置选项 - ✅ **资源优化**:针对PostgreSQL、Realtime等服务进行内存和CPU限制 - ✅ **自动备份**:生成数据库备份脚本 ### v1.3 (2025-11-05) **架构重构:** - ✅ **功能分离**:将单一脚本拆分为三个独立脚本,各司其职 - `deploy_sshkey.sh` - 专注SSH密钥部署和安全加固 - `setup_git.sh` - 专注Git安装配置和代码托管密钥管理 - `install_claude.sh` - 专注Claude Code CLI安装和配置 - ✅ **提升可维护性**:每个脚本职责单一,更易理解和维护 - ✅ **灵活组合使用**:可根据需求独立或组合使用不同脚本 **install_claude.sh 改进:** - ✅ **支持非交互式安装**:新增命令行参数支持 - ✅ **参数化配置**:支持 `--apikey`、`--baseurl`、`--yes`、`--force` 等参数 - ✅ **一键自动化部署**:支持通过 curl 管道方式传递参数一键安装 - ✅ **灵活安装选项**:新增 `--skip-nodejs`、`--skip-claude` 等跳过选项 - ✅ **简化参数命名**:使用 `--apikey` 和 `--baseurl`(兼容旧参数 `--api-key` 和 `--base-url`) **deploy_sshkey.sh 改进:** - ✅ **支持非交互式部署**:新增命令行参数支持 - ✅ **专注核心功能**:移除Git相关功能,仅处理SSH密钥部署 - ✅ **简化参数**:仅保留必要参数 `--user`、`--yes` - ✅ **智能模式切换**:自动检测交互/非交互模式,提供最佳体验 - ✅ **完善帮助文档**:添加 `--help` 参数和详细的使用示例 **setup_git.sh 新增:** - ✅ **Git自动安装**:支持多种Linux发行版的Git自动安装 - ✅ **智能默认配置**:Git 用户名默认 xledoo,邮箱默认 xledoo@qq.com - ✅ **自动创建密钥**:Gitee 密钥未创建时自动创建,已存在则跳过 - ✅ **支持多平台**:可创建Gitee和GitHub访问密钥 - ✅ **自动配置SSH**:自动配置SSH config文件 - ✅ **非交互式支持**:完整支持参数化和自动化部署 - ✅ 更新 README 文档,添加完整的三脚本架构说明和使用示例 ### v1.2 (2025-11-04) - ✅ **改进交互式输入检测**:添加 `/dev/tty` 可用性检测,在不支持的环境下给出明确提示 - ✅ **优化安装指南**:明确推荐使用两步执行方式安装 Claude Code - ✅ **环境变量配置优化**:移除 ANTHROPIC_AUTH_TOKEN,只保留 ANTHROPIC_API_KEY 和 ANTHROPIC_BASE_URL - ✅ 更新故障排查指南,添加详细的技术原理说明 ### v1.1 (2025-01-05) - ✅ **修复交互式输入问题**:添加全局 stdin 重定向,支持一键运行方式 - ✅ **环境变量配置**:install_claude.sh 改用环境变量方式(~/.bashrc) - ✅ 优化脚本兼容性,支持所有执行方式(进程替换、管道、直接执行) - ✅ 更新文档,添加技术原理说明和故障排查指南 ### v1.0 (2025-01-04) - ✅ 初始版本发布 - ✅ 支持自动下载公钥 - ✅ 支持Git自动安装和配置 - ✅ 支持SSH安全加固 - ✅ 支持多Linux发行版 --- **最后更新**: 2025-11-19