【问题标题】:GitHub Action to push commits to AWS CodeCommit: Host key verification failed将提交推送到 AWS CodeCommit 的 GitHub 操作:主机密钥验证失败
【发布时间】:2021-01-19 01:10:08
【问题描述】:

我正在尝试创建一个将任何提交推送到 AWS CodeCommit 存储库的 GitHub 操作。为此,我使用带有单个 main.yml 文件的工作流,使用 composite run steps action 方法创建 GitHub 操作。这是 Action 的样子:

name: CI
on:
  push:
    branches: [ master ]
jobs:
  codecommit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: pushes to codecommit
        env:
          CODECOMMIT_URL: ${{ secrets.CODECOMMIT_URL }}
          HOST_KEY: ${{ secrets.HOST_KEY }}
          SSH_CONFIG: ${{ secrets.SSH_CONFIG }}
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
        shell: bash
        run: |
          mkdir .ssh && cd .ssh && echo "$SSH_PRIVATE_KEY" > id_rsa && chmod 600 id_rsa
          echo "$SSH_CONFIG" > config && chmod 600 config
          echo "$HOST_KEY" > known_hosts && chmod 600 known_hosts && cd ..
          git remote add codecommit "$CODECOMMIT_URL"
          git push codecommit master --force

分解:

on:
  push:
    branches: [ master ]

每当更改推送到主分支时...

jobs:
  codecommit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

运行一个名为 codecommit 的作业,它首先检查 repo 中的代码并使其在运行程序的文件系统中可用。

      - name: push to codecommit
        env:
          CODECOMMIT_URL: ${{ secrets.CODECOMMIT_URL }}
          HOST_KEY: ${{ secrets.HOST_KEY }}
          SSH_CONFIG: ${{ secrets.SSH_CONFIG }}
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
        shell: bash

使用一些环境变量CODECOMMIT_URLHOST_KEYSSH_CONFIGSSH_PRIVATE_KEY 运行一个名为push to codecommit 的步骤。它们是:

CODECOMMIT_URL:CodeCommit 存储库的 ssh url。

HOST_KEY:运行ssh-keyscan -t rsa github.com 以获取 GitHub 存储库的主机密钥的结果。

SSH_CONFIG:这是用于 git 的 git 配置:

Host git-codecommit.*.amazonaws.com
  User {SSH Username here}
  IdentityFile .ssh/id_rsa
  StrictHostKeyChecking no

SSH_PRIVATE_KEYid_rsa 内部的私钥。

        run: |
          mkdir .ssh && cd .ssh && echo "$SSH_PRIVATE_KEY" > id_rsa && chmod 600 id_rsa

运行一系列命令,首先创建一个名为.ssh 的目录,进入该目录,然后创建一个系统可访问的文件id_rsa。此文件包含私有 SSH 密钥。

echo "$SSH_CONFIG" > config && chmod 600 config

将 SSH 配置保存到名为 config 的文件中,并授予系统对该文件的访问权限。

echo "$HOST_KEY" > known_hosts && chmod 600 known_hosts && cd ..

将主机密钥保存到名为 known_hosts 的文件中,授予系统对该文件的访问权限,然后导航回 repo 的根目录。

git remote add codecommit "$CODECOMMIT_URL"
git push codecommit master --force

将 CodeCommit URL 添加为 git 的远程,并尝试推送到此远程。

CodeCommit 似乎仍未将 GitHub 识别为已验证。我通过运行此操作得到此响应:

Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我在这个配置中遗漏了什么吗?

【问题讨论】:

  • 我有一个类似的用例需要这样做,你能找到解决方案吗?

标签: git github ssh github-actions aws-codecommit


【解决方案1】:

你不应该这样做:

$ ssh-keyscan -H git-codecommit.<region>.amazonaws.com 

...然后将结果添加到:

~/.ssh/known_hosts   

【讨论】:

    【解决方案2】:

    感谢您的提问,对您有很大帮助。

    我遇到了无法解决的 Permission denied 体验。所以基本上我尝试运行一个 docker 并对其进行测试。 根据我的经验,我必须使用来自 https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html 的 Note 4。

    所以我换了

    git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
    

    通过

    git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 2016-01-21
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 2021-05-02
      • 2020-07-15
      • 2020-11-10
      • 2011-02-11
      相关资源
      最近更新 更多