GitHub实现自动部署时所需的密钥对总结
需要 区分「GitHub 平台用的公钥」 和 「你为部署远程服务器所生成的 SSH 密钥对」,两者本质不同、作用也不同。我们来详细解释清楚:
🧩 一、GitHub 中确实存在公钥,但用途不同
GitHub 上有两种跟「SSH 公钥」相关的机制:
✅ 1. 用户 SSH 公钥(用于 git clone/push)
你可以在 GitHub 的个人设置页面中添加「SSH 公钥」:
- 位置:
Settings → SSH and GPG keys → New SSH key
- 作用:允许你从本地用 SSH 协议
git clone git@github.com:xxx.git
或git push
。
💡这个公钥用于你「连接 GitHub 仓库」,而不是连接服务器。
✅ 2. 部署密钥(Deploy Keys)
- 针对某个仓库设置,用于「只读」或「读写」的方式,赋予 CI 或服务器访问 GitHub 仓库权限。
- 存储在仓库页面的:
Settings → Deploy keys
- 比如有些服务器想要直接从 GitHub 拉代码(
git pull
),就可以在这里添加公钥。
🔐 二、你部署远程服务器的密钥是另一套
你现在的目标是:
✨ 用 GitHub Actions 自动将构建产物上传到远程服务器(如 Ubuntu 的
/www/vitepress
)
这件事需要 GitHub Actions「通过 SSH 登录你自己的服务器」,而这个连接也需要 SSH 公钥-私钥机制,但:
- 这套密钥不是 GitHub 用户自己的公钥
- 也不是部署密钥
- 而是 你本地用
ssh-keygen
自己生成的一对密钥
👇具体怎么用:
文件 | 存放位置 | 用途 |
---|---|---|
私钥(如 github_actions_key ) |
粘贴进 GitHub Secrets 中(变量名如 SSH_PRIVATE_KEY ) |
GitHub Actions 使用 |
公钥(如 github_actions_key.pub ) |
放入你远程服务器的 ~/.ssh/authorized_keys |
服务器验证身份 |
✅ 举个完整的例子帮你理清
目的 | 公钥存放位置 | 私钥使用位置 |
---|---|---|
从你本地 git push 到 GitHub |
GitHub 设置页面的「SSH keys」 | 你自己本地电脑 |
GitHub Actions 构建后上传到服务器 | 服务器上的 ~/.ssh/authorized_keys |
GitHub Secrets(私钥变量) |
远程服务器想从 GitHub 拉代码 | GitHub 仓库的「Deploy Key」 | 远程服务器 |
✅ 最终结论
判断项 | 是否正确 |
---|---|
“GitHub 也存有我们的公钥” | ✅ 正确(用于连接 GitHub 仓库) |
“这个公钥可用于远程服务器部署连接” | ❌ 不正确(是两个系统) |
“部署远程服务器需要我们单独生成一对密钥” | ✅ 正确 |
“GitHub Actions 通过 Secrets 存私钥用于远程登录” | ✅ 正确 |
👇 具体操作步骤如下(超清晰版):
🧩 第 1 步:在远程服务器(Ubuntu)中生成密钥对
bash |
然后按提示保存,比如路径是:
swift |
生成的两个文件是:
文件路径 | 用途 |
---|---|
~/.ssh/id_rsa_github_actions |
私钥(要复制到 GitHub Secrets) |
~/.ssh/id_rsa_github_actions.pub |
公钥(追加到服务器自己的 authorized_keys ) |
🧩 第 2 步:将公钥追加到自己的 authorized_keys
仍在你的 Ubuntu 服务器上运行:
bash复制编辑cat ~/.ssh/id_rsa_github_actions.pub >> ~/.ssh/authorized_keys |
✅ 这一步让“GitHub Actions 的 SSH 登录”被信任。
🧩 第 3 步:复制私钥内容,添加到 GitHub Secrets
你现在需要复制这个私钥文件的内容:
bash |
然后登录 GitHub 仓库 → Settings
→ Secrets and variables
→ Actions
→ New repository secret
名称 | 内容 |
---|---|
SSH_PRIVATE_KEY |
粘贴 id_rsa_github_actions 私钥内容 |
🧩 第 4 步:在 GitHub Actions 工作流中使用这个密钥
工作流中新增一个步骤,像这样部署构建产物到服务器:
yaml复制编辑 - name: Deploy to Remote Server via SCP |
注意:你还要另外添加 2 个 Secrets:
SERVER_HOST
(远程服务器的 IP 地址)SERVER_USER
(远程登录用户名,如ubuntu
)
🧠 为什么这么做是合理的?
- 你是服务器管理员,在服务器上生成密钥更安全,不用担心私钥传输过程被窃取。
- 公钥不需要传输,因为本身就生成在服务器上,可以直接用。
- 私钥可以安全地贴到 GitHub Secrets 中,由 GitHub Actions 使用。
✅ 最终确认
步骤 | 是否正确 |
---|---|
在 Ubuntu 上运行 ssh-keygen 生成密钥对 |
✅ 是 |
把 .pub 添加到 authorized_keys |
✅ 是 |
把私钥内容添加到 GitHub Secrets | ✅ 是 |
GitHub Actions 中引用该私钥进行远程部署 | ✅ 是 |
コメント