InstallSSHKey@0 - 安装 SSH 密钥 v0 任务

在管道中使用此任务在生成或发布步骤之前安装 SSH 密钥。

语法

# Install SSH key v0
# Install an SSH key prior to a build or deployment.
- task: InstallSSHKey@0
  inputs:
    knownHostsEntry: # string. Alias: hostName. Required. Known Hosts Entry. 
    #sshPublicKey: # string. SSH Public Key. 
    #sshPassphrase: # string. SSH Passphrase. 
    sshKeySecureFile: # string. Required. SSH Key. 
  # Advanced
    #addEntryToConfig: false # boolean. Add entry to SSH config. Default: false.
    #configHostAlias: # string. Required when addEntryToConfig = true. Alias. 
    #configHostname: # string. Required when addEntryToConfig = true. Host name. 
    #configUser: # string. Optional. Use when addEntryToConfig = true. User. 
    #configPort: # string. Optional. Use when addEntryToConfig = true. Port.
# Install SSH key v0
# Install an SSH key prior to a build or deployment.
- task: InstallSSHKey@0
  inputs:
    knownHostsEntry: # string. Alias: hostName. Required. Known Hosts Entry. 
    #sshPublicKey: # string. SSH Public Key. 
    #sshPassphrase: # string. SSH Passphrase. 
    sshKeySecureFile: # string. Required. SSH Key.
# Install SSH key v0
# Install an SSH key prior to a build or deployment.
- task: InstallSSHKey@0
  inputs:
    knownHostsEntry: # string. Alias: hostName. Required. Known Hosts Entry. 
    sshPublicKey: # string. Required. SSH Public Key. 
    #sshPassphrase: # string. SSH Passphrase. 
    sshKeySecureFile: # string. Required. SSH Key.
# Install SSH Key v0
# Install an SSH key prior to a build or release.
- task: InstallSSHKey@0
  inputs:
    hostName: # string. Required. Known Hosts Entry. 
    sshPublicKey: # string. Required. SSH Public Key. 
    #sshPassphrase: # string. SSH Passphrase. 
    sshKeySecureFile: # string. Required. SSH Key.

输入

knownHostsEntry - 已知主机条目
输入别名: hostNamestring. 必需。

指定known_hosts文件的 SSH 密钥条目。


sshPublicKey - SSH 公钥
string.

可选。 指定 SSH 公钥的内容。


sshPublicKey - SSH 公钥
string. 必需。

指定 SSH 公钥的内容。


sshPassphrase - SSH 通行短语
string.

可选。 指定 SSH 密钥的密码(如果有)。


sshKeySecureFile - SSH 密钥
string. 必需。

指定已上传到 Secure Files 以在代理上安装的 SSH 密钥。


addEntryToConfig - 将条目添加到 SSH 配置
boolean. 默认值:false

可选。 将与安装的密钥相关的条目添加到 SSH 配置文件。 密钥文件将可用于所有后续任务。


configHostAlias - 别名
string. 当 时 addEntryToConfig = true是必需的。

指定 SSH 配置项的名称。


configHostname - 主机名
string. 当 时 addEntryToConfig = true是必需的。

指定 SSH 配置项的主机名属性。


configUser - 用户
string. 可选。 在 时 addEntryToConfig = true使用 。

指定 SSH 配置条目的用户名属性。


configPort - 港口
string. 可选。 在 时 addEntryToConfig = true使用 。

指定 SSH 配置项的端口。


hostName - 已知主机条目
string. 必需。

指定known_hosts文件的 SSH 密钥条目。


任务控件选项

除任务输入外,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性

输出变量

无。

备注

在管道中使用此任务在生成或发布步骤之前安装 SSH 密钥。

注意

此任务需要代理上的 Git Bash for Windows。

使用情况和最佳做法

如果在 托管池中安装 SSH 密钥,在管道的后续步骤中,可以连接到已存在匹配公钥的远程系统。 例如,可以连接到 Git 存储库或 Azure 中的 VM。

建议不要将公钥作为纯文本传入任务配置。 相反,请在管道中为文件的内容mykey.pub设置机密变量。 然后,将管道定义中的变量调用为 $(myPubKey)。 对于密钥的机密部分,请使用 Azure Pipelines 中的 安全文件库

若要创建任务,请使用以下配置良好的“安装 SSH 密钥”任务的示例:

steps:
- task: InstallSSHKey@0
  displayName: 'Install an SSH key'
  inputs:
    knownHostsEntry: 'SHA256:1Hyr55tsxGifESBMc0s+2NtutnR/4+LOkVwrOGrIp8U johndoe@contoso'
    sshPublicKey: '$(myPubKey)'
    sshKeySecureFile: 'id_rsa'

注意

公钥应添加到存储库\组织;否则,会出现访问问题。 对于 GitHub,请遵循 上述指南。 对于Azure DevOps Services,请使用将公钥添加到 Azure DevOps Services/TFS

在同一管道作业中安装多个 SSH 密钥

在同一管道作业中使用多个密钥时,默认使用第一个密钥。 为了能够在建立 SSH 连接时使用所需的密钥,可以使用Advanced任务的 部分InstallSSHKey设置以下参数:addEntryToConfig、、configHostAliasconfigHostnameconfigUserconfigPort

这些参数允许将主机添加到 SSH 配置文件 (例如, /root/.ssh/config 对于 Linux) ,以便通过别名在自定义脚本中使用它。

生成完成后,该任务将尝试还原原始 SSH 配置文件。 如果最初没有 SSH 配置文件,则会从代理中删除主机。

多个 SSH 密钥安装的示例。 具有多个 GitHub 存储库和每个存储库的自己的密钥的情况:

pool: <Some Agent Pool>

steps:
- task: InstallSSHKey@0
  inputs:
    knownHostsEntry: $(known_host)
    sshPublicKey: $(first_public_key)
    sshKeySecureFile: $(first_private_key)
    addEntryToConfig: true
    configHostAlias: <first-host-alias>
    configHostname: github.com
    configUser: git
  displayName: Install First Repo SSH Key

- task: InstallSSHKey@0
  inputs:
    knownHostsEntry: $(known_host)
    sshPublicKey: $(second_public_key)
    sshKeySecureFile: $(second_private_key)
    addEntryToConfig: true
    configHostAlias: <second-host-alias>
    configHostname: github.com
    configUser: git
  displayName: Install Second Repo SSH Key

- bash: git clone git@<first-host-alias>:<owner>/<first-repo>.git
  displayName: Clone First Repo

- bash: git clone git@<second-host-alias>:<owner>/<second-repo>.git
  displayName: Clone Second Repo

相关的 GitHub 文档

示例

使用 GitHub 的示例设置

本部分介绍如何在 Azure Pipelines 中将专用 GitHub 存储库与 YAML 配合使用。

如果你有不想向开源社区公开的存储库,则常见的做法是将存储库设为私有。 但是,如果想要使用该工具管理存储库,则 AZURE DevOps 等 CI/CD 工具需要访问存储库。 若要授予 Azure DevOps 访问权限,可能需要 SSH 密钥来验证对 GitHub 的访问权限。

下面是使用 SSH 密钥对 GitHub 的访问进行身份验证的步骤:

  1. 生成用于验证从 GitHub 到 Azure DevOps 的访问的密钥对:

    1. 在 GitBash 中运行以下命令:

      ssh-keygen -t rsa
      
    2. 输入 SSH 密钥对的名称。 在我们的示例中,我们使用 myKey

      GitBash 提示输入 SSH 密钥对名称的屏幕截图。

    3. (可选) 可以输入密码来加密私钥。 此步骤是可选的。 使用通行短语比不使用通行短语更安全。

      GitBash 提示输入 SSH 密钥对通行短语的屏幕截图。

      ssh-keygen 创建 SSH 密钥对,并显示以下成功消息:

      GitBash 消息的屏幕截图,显示已创建 SSH 密钥对。

    4. 在 Windows 文件资源管理器中,检查新创建的密钥对:

      Windows 文件资源管理器中的密钥对文件的屏幕截图。

  2. 将公钥添加到 GitHub 存储库。 (公钥以“.pub”) 结尾。 为此,请在浏览器中转到以下 URL: https://github.com/(organization-name)/(repository-name)/settings/keys

    1. 选择“添加部署密钥”。

    2. 在“ 添加新 ”对话框中,输入标题,然后复制并粘贴 SSH 密钥:

      “添加新”对话框的屏幕截图。

    3. 选择“添加密钥”。

  3. 将私钥上传到 Azure DevOps:

    1. 在 Azure DevOps 的左侧菜单中,选择“ 管道>”。

      Azure Pipelines 菜单的屏幕截图。

    2. 选择“ 安全文件>+ 安全文件”:

      “保护文件”菜单的屏幕截图。

    3. 选择“ 浏览”,然后选择私钥:

      “上传文件”对话框和“浏览”按钮的屏幕截图。

  4. 恢复“已知主机条目”。 在 GitBash 中,输入以下命令:

    ssh-keyscan github.com
    

    “已知主机条目”是 GitBash 结果中不以 # 开头的显示值:

    GitBash 中关键搜索结果的屏幕截图。

  5. 创建 YAML 管道。

    若要创建 YAML 管道,请在 YAML 定义中添加以下任务:

    - task: InstallSSHKey@0
     inputs:
       knownHostsEntry: #{Enter your Known Hosts Entry Here}
       sshPublicKey: #{Enter your Public key Here}
       sshKeySecureFile: #{Enter the name of your key in "Secure Files" Here}
    

现在已安装 SSH 密钥,可以继续使用脚本(而不是默认 HTTPS)进行连接。

要求

要求 说明
管道类型 YAML、经典版本、经典版本
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 此任务使用以下命令 限制运行:受限
可设置变量 此任务有权 设置以下变量:SSH_AGENT_PID、SSH_AUTH_SOCK、INSTALL_SSH_KEY_CONFIG_LOCATION INSTALL_SSH_KEY_KNOWN_HOSTS_LOCATION
代理版本 2.182.1 或更高版本
任务类别 实用工具
要求 说明
管道类型 YAML、经典版本、经典版本
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 Any
可设置变量 Any
代理版本 2.117.0 或更高版本
任务类别 实用工具