SSH 密钥
管理用于 Git 提供商安全认证和远程服务器访问的 SSH 密钥。
概述
sh0 中的 SSH 密钥有两个主要用途:
- Git 提供商认证: 从支持 SSH 的 GitHub、GitLab、Bitbucket 或任何 Git 服务器克隆私有仓库。
- 远程服务器访问: 在多服务器设置中通过 SSH 隧道连接远程节点。
sh0 使用 AES-256-GCM 静态加密存储 SSH 私钥。密钥仅在需要认证时在内存中解密。
生成 SSH 密钥对
如果你没有 SSH 密钥对,请使用以下命令生成。sh0 支持 Ed25519(推荐)和 RSA 密钥。
Ed25519(推荐):
ssh-keygen -t ed25519 -C "sh0-deploy-key" -f ~/.ssh/sh0_deployRSA(4096 位):
ssh-keygen -t rsa -b 4096 -C "sh0-deploy-key" -f ~/.ssh/sh0_deploy这将创建两个文件:
~/.ssh/sh0_deploy-- 私钥(保密)~/.ssh/sh0_deploy.pub-- 公钥(可安全分享)
Warning
永远不要分享你的私钥。只有公钥(
.pub 文件)应该添加到 Git 提供商。私钥上传到 sh0 以便它可以代表你进行认证。向 sh0 添加 SSH 密钥
你可以通过控制台或 API 添加 SSH 密钥。
通过控制台:
- 导航到 设置 → SSH 密钥。
- 点击 添加 SSH 密钥。
- 输入描述性名称(例如「GitHub 部署密钥」)。
- 粘贴你的私钥文件内容。
- 点击 保存。
添加 SSH 密钥表单,包含名称和私钥字段
通过 API:
curl -X POST https://your-server:9000/api/ssh-keys \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "GitHub Deploy Key",
"private_key": "-----BEGIN OPENSSH PRIVATE KEY-----\\n...\\n-----END OPENSSH PRIVATE KEY-----"
}'用于 Git 提供商的 SSH 密钥
要从私有仓库部署,sh0 需要一个对仓库有读取权限的 SSH 密钥。以下是常见提供商的设置方法:
GitHub:
- 前往仓库 → Settings → Deploy Keys。
- 点击 Add deploy key。
- 粘贴公钥(
.pub文件)的内容。 - 取消勾选「Allow write access」(sh0 只需要读取权限)。
GitHub 部署密钥设置页面
GitLab:
- 前往项目 → Settings → Repository → Deploy Keys。
- 添加包含你公钥的新部署密钥。
- 授予只读访问权限。
Bitbucket:
- 前往仓库 → 设置 → Access keys。
- 点击 Add key 并粘贴你的公钥。
Tip
你可以为多个仓库使用同一个 SSH 密钥对,或为每个仓库生成单独的密钥以获得更细粒度的访问控制。sh0 支持多个密钥,连接到 Git 提供商时会按顺序尝试。
用于服务器访问的 SSH 密钥
在多服务器设置中添加远程节点时,sh0 使用 SSH 密钥建立安全隧道。密钥必须在远程服务器上授权。
- 将 SSH 密钥添加到 sh0(如上所述)。
- 将公钥复制到远程服务器的
~/.ssh/authorized_keys文件:
ssh-copy-id -i ~/.ssh/sh0_deploy.pub deploy@remote-server在 sh0 中添加节点时,选择此 SSH 密钥进行认证。sh0 将使用它与远程 Docker 守护进程建立 SSH 隧道。
节点配置,包含 SSH 密钥选择下拉菜单
密钥指纹
每个 SSH 密钥都有唯一的指纹,可用于验证其身份。sh0 为每个存储的密钥显示 SHA-256 指纹。
# View the fingerprint of a local key file
ssh-keygen -lf ~/.ssh/sh0_deploy.pub将此指纹与 sh0 控制台中显示的指纹进行比较,以验证你上传了正确的密钥。
管理多个密钥
SSH 密钥面板列出 sh0 中存储的所有密钥。对于每个密钥,你可以看到:
- 密钥名称和指纹
- 密钥类型(Ed25519、RSA)
- 添加日期
- 哪些应用或节点使用该密钥
SSH 密钥管理面板,显示所有存储密钥的详细信息
Tip
为你的密钥使用描述性名称(例如「GitHub - 生产 API」、「节点 - 欧洲法兰克福」),以便轻松识别每个密钥的用途。
移除密钥
要从 sh0 中移除 SSH 密钥:
- 导航到 设置 → SSH 密钥。
- 点击要移除密钥旁边的删除图标。
- 确认删除。
curl -X DELETE https://your-server:9000/api/ssh-keys/key_abc123 \
-H "Authorization: Bearer YOUR_TOKEN" Danger
移除正在被应用或节点使用的 SSH 密钥会中断部署和服务器连接。如果密钥当前正在使用,sh0 会在允许删除之前发出警告。