拉取部署、github 操作和 ssh 密钥

2024-04-20

比方说,我想使用 GitHub 操作和拉取策略来设置部署流程。

所以我有一个 Ubuntu 服务器,我复制服务器的公共 ssh 密钥,将其添加到我的 GitHub 帐户,然后我可以从 Ubuntu 服务器克隆,构建并运行应用程序。

那太好了,但我觉得这里有一个小陷阱。
密钥将添加到帐户,而不是存储库。

如果我离开存储库所有者的组织会怎样?
服务器将失去执行适当 CI 的能力,对吗?

组织所有者可以创建 SSH 密钥持有者的帐户,并且永远不会离开组织,但如果存储库所有权转移怎么办?
我可能在这里错过了一些东西,但为什么不允许将密钥直接添加到存储库,而不是用户帐户?
或者这个选项是存在的,但我不知何故错过了它?


密钥将添加到帐户,而不是存储库。

这就是为什么你有部署密钥 https://github.com/cli/cli/releases/tag/v2.5.0, per存储库。

类似 GitHub 的 Actionwebfactory/ssh-agent https://github.com/cli/cli/issues/4242例如确实支持部署密钥。

为了支持在此用例中选择正确的密钥,此操作会扫描关键注释,并将设置额外的 Git 和 SSH 配置以使事情正常进行。

  • 为存储库创建部署密钥时,例如[email protected] /cdn-cgi/l/email-protection:owner/repo.git or https://github.com/owner/repo,将该 URL 放入关键评论中。 (提示:尝试ssh-keygen ... -C "[email protected] /cdn-cgi/l/email-protection:owner/repo.git".)
  • 将密钥添加到代理后,此操作将扫描密钥注释。
  • 对于包含此类 URL 的关键注释,将编写一个 Git 配置设置,该设置使用url.<base>.insteadof。它将 git 请求重定向到以以下任一开头的 URLhttps://github.com/owner/repo https://github.com/owner/repo or [电子邮件受保护] /cdn-cgi/l/email-protection:owner/repo 为虚假主机名/URL,例如[email protected] /cdn-cgi/l/email-protection...:owner/repo.
  • 生成适用于假主机名的 SSH 配置部分。它将 SSH 连接映射回 github.com,同时将 SSH 指向包含相应密钥公共部分的文件。这将使 SSH 在连接到 GitHub.com 时使用正确的密钥。

然后你会得到一个 GitHub Action 配置,例如这个例子 https://gist.github.com/pataruco/91b6cda6b02b61b3bcd2bbbfaa963fd9:

name: Deploy
on:
push:
 tags:
   - 'GA*'
# ...
- name: Install SSH Client ????
  uses: webfactory/[email protected] /cdn-cgi/l/email-protection
  with:
    ssh-private-key: ${{ secrets.DEPLOY_KEY }}

- name: Deploy ????
  uses: JamesIves/[email protected] /cdn-cgi/l/email-protection
  with:
    BASE_BRANCH: master
    BRANCH: gh-pages
    CLEAN: true
    FOLDER: .
    SSH: true
# ...

在命令行中,因为GitHub CLI gh 2.5.0 https://github.com/cli/cli/releases/tag/v2.5.0(2022 年 2 月):gh repo deploy_key https://cli.github.com/manual/gh_repo_deploy-key

gh repo deploy-key add <key-file> [flags]

# generate a passwordless SSH key and add it as a deploy key to a repository
$ ssh-keygen -t ed25519 -C "my description" -N "" -f ~/.ssh/gh-test
$ gh repo deploy-key add ~/.ssh/gh-test.pub

See 问题 4242 https://github.com/cli/cli/issues/4242从上下文来看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拉取部署、github 操作和 ssh 密钥 的相关文章

  • Github 贡献图中未显示进度?

    我在 github 中的存储库是公开的 当我通过命令行将文件从本地系统推送到 github 时 新贡献不会显示在贡献直方图中 但是 当我将任何文件直接添加到 github 的存储库中时 贡献会显示在直方图中 这是什么原因呢 一个可能的原因是
  • Github 操作/缓存工作的限制在什么范围内?

    我不太明白Github到了什么程度动作 缓存有效 我的意思是 如果我发出拉取请求 然后在同一个拉取请求中添加 1 个提交 则缓存工作正常 但如果我在同一分支中创建新的拉取请求 缓存将重置并再次启动 但为什么呢 有没有办法将文件缓存扩展到所有
  • 将 jQuery 与托管在 Github 页面上的 Jekyll 站点结合使用

    我有一个简单的 Jekyll 博客托管在 github 页面上 我已经包含了 jQuery 和 tablesorter 插件 但遇到了错误 据我所知 这个错误是由于没有以正确的顺序加载 jQuery 引起的 我的下图显示代码的顺序是正确的
  • 如何在 GitHub Actions 上运行 Kotlin 脚本?

    我想在 CI 中运行 Kotlin 脚本而不依赖于 Gradle 项目 这样我就可以轻松地执行使用 shell bash batch 难以编程的操作 并且可以在需要时使用库 让 Kotlin 脚本仅在 Ubuntu Linux 上运行是可以
  • git commit 给出错误:空提交集已通过

    当尝试恢复到以前的提交时 我尝试了 git revert no commit 0766c053 HEAD 然而这给出了一个错误 empty commit set passed 问题 该错误是什么意思 以及出了什么问题revert命令 删除
  • Git 合并如何处理同时提交?

    给定一个具有两个分支的存储库 每个分支都有独立的提交 Branch Commits final e g i master a b c d f h 上图中的字母很重要 即 master 和 final 同时正在开发中 并且必须保留两个分支中的
  • Maven 找不到 .git (dotGitDirectory)

    我有一个与所问问题类似的问题here https stackoverflow com questions 31159484 mavengit commit id plugin git directory could not be found
  • 如何从 Visual Studio 2013 将现有解决方案添加到 GitHub

    我浏览了许多关于 VS 2013 中新的 Git 集成的网页 它们不涉及向 Github 添加现有解决方案 事实上 我找不到太多关于使用 GitHub 而不是 Visual Studio Online 的信息 谁能告诉我如何从现有解决方案开
  • 对 git Push 运行单元测试,对 Pull 请求运行集成测试

    在构建 R 包时 我们使用 testthat 来编写测试 我们有 2 个文件 特定包的测试文件 特异性R 我们用它来确保所有包继续一起工作并且总体结果良好 整体R 当前 当我们推送到 github 或通过 Travis 创建 PR 时 都会
  • GitHub v3 API - 如何在存储库中创建初始提交?

    我正在使用 v3 API 并设法列出存储库 树 分支 访问文件内容并创建 blob 树 提交 我现在正在尝试创建一个新的存储库 并设法使用 POST user repos 来完成它 但是当我尝试在这个新存储库中创建 blob trees c
  • 仅使用特定提交消息触发 travis CI 构建

    我希望 travis 仅在我有特定的提交消息时才启动 我怎样才能做到这一点 我的 travis yml 文件是here https github com mosaadm mooltipass blob master travis yml 我
  • 添加 Git 远程后“致命:拒绝合并不相关的历史记录”

    我已将远程存储库添加到我正在使用的文件夹中 git remote add origin https github com
  • 如何使用 R 从 github 存储库文件夹中获取列表文件

    我想知道是否存在一个函数或链接或任何可以像这样工作的方法list files R 中的函数 但位于存储在 github 存储库上的文件夹上 示例 github 存储库文件夹 https github com KZPS Spotkania t
  • 在 GitHub 上更新拉取请求后如何恢复审核流程?

    我分叉了 GitHub 存储库并创建了拉取请求 审稿人要求我修改 要求更改1 条评论请求由具有写入权限的审阅者进行更改 了解更多 https docs github com en github collaborating with issu
  • GitHub Web UI 中的“base”和“head”存储库是什么?

    GitHub 的 UI 相当不直观且考虑不周 所以这里有一个问题 什么是 头 回购 什么是 基础 回购 不知道是从哪一个抄来的 基础 和 头部 这两个词的意思是相同的 链表的 头 类似于树的 基 GitHub 有叉树和文件树 Head 和
  • github 操作未收到机密

    我看过其他答案 但似乎都不起作用 我想我只是想用 Github Actions 做一些非常简单的事情 只需让 access key 可用于我的 github 操作 而不将其放入我的 github 存储库中 所以我认为我们可以创造action
  • 如何使用 Github Pages 分支正确提交到存储库中

    我有一个问题 情况基于gh pages https pages github com 我的项目使用预处理器和其他困难的人员 因此 我的项目结构如下所示 主分支 src node modules public js css etc index
  • 将新更新从原始 GitHub 存储库提取到分叉的 GitHub 存储库

    我在 GitHub 上分叉了某人的存储库 并希望使用原始存储库中的提交和更新来更新我的版本 这些是在我分叉我的副本后制作的 如何提取在源中所做的更改并将它们合并到我的存储库中 您必须将原始存储库 您分叉的存储库 添加为远程存储库 来自有关分
  • 使用 versioneer 和 GitHub 更新版本号

    我在用versioneer适用于多个 GitHub 托管的 Python 项目 看来 versioneer 已安装并且工作正常 我可以调用project version 但是我忘记了如何更新版本号的过程 如果有什么东西在setup cfg
  • GitHub 未显示存储库中使用的语言

    我在 GitHub 上上传了 java 的 android studio 项目 但它没有显示语言部分 如何添加语言部分 为什么 GitHub 无法检测存储库中使用的语言 存储库链接 https github com QAZIMAAZARSH

随机推荐