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 的建议,但没有用。
我已经向两个回购协议(主要项目和私人回购协议)添加了两个秘密(两者都相同)。
- KNOWN_HOSTS
- SSH_PRIVATE_KEY -> 这是内容
-----开始 RSA 私钥-----
ssh-ed25519 “SSH_KEY”
-----结束 RSA 私钥-----
但这是输出:
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
我无法启动 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 的建议,但没有用。
我已经向两个回购协议(主要项目和私人回购协议)添加了两个秘密(两者都相同)。
- KNOWN_HOSTS
- SSH_PRIVATE_KEY -> 这是内容 -----开始 RSA 私钥----- ssh-ed25519 “SSH_KEY” -----结束 RSA 私钥-----
但这是输出:
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