TeamCity On-Premises 2024.03 Help

SSH 密钥管理

您可以将私人 SSH 密钥上传到 TeamCity 项目中。 上传的密钥可用于配置 VCS 根目录,以及在 SSH Agent 构建功能中。

受支持的密钥格式

TeamCity 支持 PEM 和 OpenSSH 格式的密钥。 使用不同格式的键需要进行转换。 例如,您可以使用 PuTTY Key Generator将不受支持的 Putty 私钥( *.ppk )转换为 PEM 格式。 为了做到这个,您需要导航到 Conversions | 导出 OpenSSH 密钥 菜单。

将SSH密钥上传至TeamCity服务器

要允许 TeamCity 项目通过 SSH 密钥访问远程仓库,您首先需要将密钥上传到这些项目中。

  1. 项目设置 中,点击 SSH 密钥

  2. SSH 密钥 页面上,点击 上传 SSH 密钥

  3. 在 "上传 SSH 密钥" 对话框中,浏览以查找私钥文件,并为此密钥指定一个名称。

  4. 点击 Save 来保存上传的密钥。

将 SSH 密钥添加到 TeamCity

上传的 SSH 密钥存储在 <TeamCity 数据目录>/config/projects/<项目>/pluginData/ssh_keys 目录中。 TeamCity 跟踪此目录,因此上传的密钥在当前项目及其子项目中变得可用,无需重新启动服务器。

生成的 SSH 密钥

如果您使用 GitHub Deploy Keys 或类似的身份验证工作流,则可以让 TeamCity 代替您手动生成 SSH 密钥。 这种方法更为安全(因为生成的密钥不会存储在您的本地机器上)并且速度明显更快。 后者尤其有助于您定期重新生成并轮换 SSH 密钥。

  1. 项目设置 中,点击 SSH 密钥

  2. 点击 Generate SSH Key 按钮。

    生成 SSH 密钥
  3. 输入键名,选择键类型,然后点击 Generate

  4. 如果您需要为新生成的密钥提供私钥或公钥:

    • 私钥存储在 数据目录/config/projects/<父项目>/pluginData/ssh_keys 目录中。

    • 一个公共密钥可以从主 SSH Keys 页面访问(点击所需密钥下面的 Copy the public key 链接)。 将此密钥粘贴到您的版本控制服务中(例如,在 GitHub 中:“Repository settings | Deploy Keys | Add deploy key”)。

  5. 在您的 TeamCity VCS 根目录的 验证设置 中选择生成的密钥。 为了您的便利,TeamCity 中生成的密钥被放置在一个单独的类别中。

    在 VCS 授权设置中选择生成的密钥

配置 VCS 根设置

一旦所需的 SSH 密钥被上传,修改 VCS Root 设置以选择您的项目应使用的密钥。

  1. 前往 项目设置 | VCS 根 页面,然后点击所需的根。

  2. 认证设置 部分,点击所需的 "私钥" 选项:

    • 上传的密钥 — 选择此选项以使用上传到项目的密钥

    • 默认私钥 — 选择此选项以使用文件系统中默认位置的可用密钥,这是常用 ssh 工具的默认位置:如果文件存在或私钥文件 <用户主目录>/.ssh/id_rsa (需要在服务器上并且在使用 代理端检出的代理上)则按照 <用户_主页>/.ssh/config 中指定的映射。

    • 自定义私钥—— 仅支持用于服务器端检出。 在服务器机器上,将Private Key Path字段填写为私钥文件的绝对路径。 如果密钥已加密,请在相应的字段中指定口令。

选择一个 SSH 密钥

将 SSH 密钥分发给构建代理

如果您配置了 代理端签出(agent-side checkout),服务器就会将 SSH 密钥传递给代理。 在构建过程中,Git 插件从服务器下载密钥到代理,并在 git fetch/clone 完成后删除该密钥。

为了将密钥从服务器转移到代理,TeamCity 使用 DES 对称加密对其进行加密。 为了更安全的方式,配置一个 HTTPS 连接,使代理和服务器之间建立连接

除了 VCS 根,上传的 SSH 密钥也可以在 SSH Agent 构建功能中使用。 查看此链接以获取更多信息:SSH Agent

REST API

TeamCity REST API允许外部应用程序和脚本通过URL访问TeamCity资源。 您可以利用此功能上传 SSH 密钥并自定义 VCS Root 设置。

查看已上传的密钥

/app/rest/projects/<project_locator>/sshKeys

将新的 SSH 密钥上传到项目中

/app/rest/projects/<project_locator>/sshKeys?fileName=<Key_Name>
  • 正文:私钥文件的内容

  • 内容类型头部:"text/plain"

生成新密钥

/app/rest/projects/<project_locator>/sshKeys/generated?keyName=NewKey&keyType=RSA
  • keyName — 任何有效的字符串,即您的新密钥名称。

  • keyType — 可为 "RSA" 或 "ED25519"。

设置 VCS 验证设置

  • 将 "认证方法" 切换为 "已上传的密钥"。 请求主体:"TEAMCITY_SSH_KEY"。

    /app/rest/vcs-roots/<locator>/properties/authMethod
  • 选择一个特定的 SSH 密钥。 请求主体:SSH 密钥名称。

    /app/rest/vcs-roots/<locator>/properties/teamcitySshKey
  • 指定密码加密的 SSH 密钥所需的密码。 请求正文:纯密码字符串。

    /app/rest/vcs-roots/<locator>/properties/secure:passphrase

删除密钥

/app/rest/projects/<project_locator>/sshKeys?fileName=<Key_Name>
最后修改日期: 16日 7月 2024年