Github 操作权限被拒绝(公钥)

Github actions permission denied (publickey)

我无法启动 Github 操作工作流程。 Flutter 项目有一个自定义包的依赖。我在 Github 存储库中有这个自定义包。这是我在 pubspec.yaml:

中设置此依赖项的方式
xxxx_package:
git:
  url: git@github.com:USER_NAME/xxxx_package.git
  ref: develop

如果我启动 flutter pub get 命令,它会成功结束,我可以毫无问题地构建和执行应用程序。

但是当我向 Github 发送推送并启动工作流时,该过程结束时出现以下错误:

Running "flutter pub get" in Project-Flutter...            
Git error. Command: `git clone --mirror git@github.com:xxx/xxxx_package.git /home/runner/.pub-cache/git/cache/xxxx_package-123456789`
stdout: 
stderr: Cloning into bare repository '/home/runner/.pub-cache/git/cache/xxxx_package-123456789'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

这是我的操作工作流程文件:

name: Check merge

on:
  push:
    branches: [ main, develop ]

  pull_request:
    branches: [main, develop]
    

  workflow_dispatch:

jobs:
  build:
    name: flutter environment
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v2
        with:
          distribution: 'zulu'
          java-version: '11'
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: '2.8.1'
      - name: Install dependencies
        run: flutter pub get
      - run: flutter format --set-exit-if-changed .
      - run: flutter analyze .
      - run: flutter test

我已将自定义包存储库配置为使用 shh。

2022 年 2 月 17 日更新

我尝试了@GuiFalourd 的建议,但没有用。

我已经向两个回购协议(主要项目和私人回购协议)添加了两个秘密(两者都相同)。

但这是输出:

IO  : Finished git. Exit code 128.
| Nothing output on stdout.
| stderr:
| | Cloning into bare repository '/home/runner/.pub-cache/git/cache/xxxx_package-363daa26604baf2e3bfeae08af7d9c7050760631'...
| | Warning: Permanently added the ECDSA host key for IP address 'x.x.x.x' to the list of known hosts.
| | Load key "/home/runner/.ssh/id_rsa": invalid format
| | git@github.com: Permission denied (publickey).
| | fatal: Could not read from remote repository.
| | 
| | Please make sure you have the correct access rights
| | and the repository exists.

嗯,我已经找到问题了。 @GuiFalourd 让我走上了正确的道路。 在秘密值中(在 github 回购页面上,转到 settings -> secrets -> actions -> New repository secret):

  • SSH_PRIVATE_KEY:一开始,我使用命令pbcopy < ~/.ssh/id_rsa.pub获取ssh public密钥。这是错误的。这个秘密需要 ssh 私钥。正确的命令是 pbcopy < ~/.ssh/id_rsa
  • KNOWN_HOSTS:启动ssh-keyscan github.com命令后,重要的是复制属于github.com ssh-rsa [KEY]
  • 的行

注意:此机密必须存在于所有应用程序依赖包存储库中。

我在这里为您提供工作流 yaml 文件的最终版本:

名称:检查合并

on:
  push:
    branches: [ master, develop ]
    paths:
      - "**.dart"

  pull_request:
    branches: [master, develop]
    paths:
      - "**.dart"

  workflow_dispatch:

jobs:
  build:
    name: flutter environment
    runs-on: ubuntu-latest
    steps:
      - uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          name: id_rsa
          known_hosts: ${{ secrets.KNOWN_HOSTS }}
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v2
        with:
          distribution: 'zulu'
          java-version: '11'
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: '2.8.1'
      - name: Install dependencies
        run: flutter pub get
      - run: flutter test