记一次两步验证 (2FA) 导致GitHub Actions无法操作其他仓库问题

前言

最近在弄 GitHub Actions 做些简单的任务, 但是中间发现了一个问题:本仓库使用Actions 时正常没有啥问题,但是一旦用一个私密仓库操作一个公共仓库(不一定是私密仓库)操作推送操作时, 就会死命报:remote: Permission to xxxx denied to github-actions[bot]. 

查阅了一堆资料 :

1.Personal Access Token也配置了 repo 权限

2.仓库的 "Settings" -> "Secrets" 也设置了 Secrets 变量, "Actions">"General" > "Workflow permissions" 也选择了 Read and write permissions

3.使用 HTTPS URL 进行推送

无一例外都失败 全都报:remote: Permission to xxxx denied to github-actions[bot]. 

查询谷歌无果后,突然想到  上个月我被github 强制开启了 两步验证 (2FA) 就是这个坑爹的两步验证,

如果你启用了两步验证 (2FA),通常是不支持在 Git 操作中直接使用用户名和密码(包括 Personal Access Token)进行推送的。2FA 要求使用访问令牌(Access Token)与密码结合使用。

在 GitHub Actions 中,如果启用了两步验证 (2FA),推送操作可能需要使用 SSH 密钥。这样可以通过配置 SSH 密钥进行认证,而不需要提供密码或访问令牌。

操作

1.生成ssh密钥(随便一个linux环境 这里我用的centos7) :

 ssh-keygen -t rsa -b 4096 -C "[email protected]"

执行后你可以选择为 SSH 密钥设置一个密码(这里不建议设置密码了)

最后生成并 保存在/root/.ssh 目录里的 id_rsa.pub id_rsa 

id_rsa.pub内容添加到 被操作仓库的 "Settings" -> "Deploy keys"

id_rsa 内容添加到 操作仓库的 "Settings" -> "Secrets" 的 Secrets 变量里

最后yaml 里添加操作代码

这里给一个例子 :

- name: Push changes to HACG repository
run: |
cd HACG
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor }}@users.noreply.github.com"
git add .
git commit -m "Update image paths"
eval "$(ssh-agent -s)"
ssh-add - <<< "${{ secrets.SSH_PRIVATE_KEY }}"
git push [email protected]:songwqs/HACG.git main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
一些课外补充:

定时与手动

name: Weekly Sunday Job
on:
schedule:
- cron: '0 3 * * 0' # 每周日的3点执行

jobs:
weekly_job:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v2

# 在这里添加你的工作流程步骤
- name: Run your tasks
run: |
echo "This job runs every Sunday at 3 AM"

 

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注