当前位置: 首页 > news >正文

GitHub Push 认证失败 fatal Authentication failed

GitHub Push 认证失败 “fatal: Authentication failed”

一、问题背景

在 Windows 系统中,我使用 HTTPS 协议 绑定了 GitHub 远程仓库(例如 https://github.com/ChipenHub/DS_practice.git),并能正常执行 git pushgit pull 等操作。当迁移到 Linux 系统后,再次尝试推送代码时,出现了以下错误:

fatal: Authentication failed for 'https://github.com/ChipenHub/DS_practice.git/'

二、问题分析

  1. 协议差异

    • 在 Windows 上,Git 支持使用 Git Credential Manager (GCM) 保存 GitHub 账号和密码(或 Token),因此可以透明地用 HTTPS 协议进行认证。

    • 在 Linux 上,若没有配置 GCM 或凭证缓存,则 Git 会要求手动输入用户名和密码。由于 GitHub 已经禁用密码认证(2021 年 8 月起),必须使用 Personal Access Token (PAT)SSH

  2. 根本原因

    • Linux 环境中没有配置凭证助手(如 GCM)。

    • HTTPS 协议需要手动输入 GitHub Token,每次推送都很不方便。

    • 因此最佳实践是改用 SSH 公钥认证,一次配置即可长期使用。

三、解决方案思路

  • 将远程仓库从 HTTPS 改为 SSH 协议(git@github.com:...)。

  • 在 Linux 上生成 SSH 密钥,并绑定到 GitHub 账号。

  • 验证 SSH 连接是否成功,确保可以免密码推送代码。

四、解决步骤

1. 检查现有远程仓库配置

git remote -v

输出示例(原本是 HTTPS):

origin  https://github.com/ChipenHub/DS_practice.git (fetch)
origin  https://github.com/ChipenHub/DS_practice.git (push)

2. 生成 SSH 密钥

在 Linux 上执行以下命令(建议用邮箱作为注释):

ssh-keygen -t ed25519 -C "chipen@mail.com"

若系统不支持 ed25519,则使用 RSA:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 生成后默认存放在:

    ~/.ssh/id_ed25519
    ~/.ssh/id_ed25519.pub
    

3. 添加 SSH 私钥到 ssh-agent

启动 ssh-agent 并添加私钥:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

4. 将公钥添加到 GitHub

查看公钥内容:

cat ~/.ssh/id_ed25519.pub

复制输出内容,然后到 GitHub 网站:
Settings → SSH and GPG keys → New SSH key → 粘贴公钥 → Save

5. 修改远程仓库地址为 SSH

git remote set-url origin git@github.com:ChipenHub/DS_practice.git

确认修改结果:

git remote -v

输出应为:

origin  git@github.com:ChipenHub/DS_practice.git (fetch)
origin  git@github.com:ChipenHub/DS_practice.git (push)

6. 测试 SSH 连接

ssh -T git@github.com

成功输出类似:

Hi ChipenHub! You've successfully authenticated, but GitHub does not provide shell access.

7. 推送代码

现在即可正常使用:

git push origin main

五、结果与总结

  • 问题原因:Linux 下使用 HTTPS 方式推送 GitHub 仓库时,没有凭证缓存,GitHub 又禁用了密码认证,导致 Authentication failed

  • 解决办法:改用 SSH 公钥认证,在 Linux 上生成密钥并绑定到 GitHub,修改远程地址后即可免密推送。

  • 反思

    • HTTPS 协议在多平台下需要额外的 Token 管理工具,而 SSH 一次配置即可长期稳定使用。

    • 建议统一使用 SSH 协议来管理 GitHub 仓库,尤其是在 Linux、服务器等环境中。

http://www.dtcms.com/a/343285.html

相关文章:

  • 数据治理——解读56页 数据治理整体规划汇报【附全文阅读】
  • java-ArrayList的使用
  • 短波红外科研相机:开启科研新视野的利器​
  • LCR 019. 验证回文串 II
  • SpringCloudConfig配置文件本地化部署
  • 第5.1节:awk内置变量
  • MySQL诊断系列(5/6):表结构与元数据查询——快速掌握数据库“DNA”
  • 在pycharmIDE中如何快速掌握一个新模块的使用方法
  • 前端视频流处理从 0 到 “能跑”:可复制 Demo+WebGL/Worker 优化,覆盖会议 / 直播 / 监控场景
  • js来比较两个对象内容有误差异
  • 从源码中学习Java面向对象的多态
  • 通过自定义域名访问内网的web服务和tcp应用:内网ip到局域网外域名访问过程
  • 使用Docker部署Coze Studio开源版
  • (亲测)Centos7升级gcc 9
  • XTDrone——无人机基于2D激光Lidar进行二维运动规划(细节提醒以及相关报错解决)
  • 嵌入式-中断的概念,优先级,编程-Day17
  • 高效研发管理新选择:Codes 一站式平台深度解析
  • 6.Shell脚本修炼手册---grep命令使用指南
  • 定时器(Timer)和延时器
  • 文化遗产数字化对手持SLAM设备有哪些特殊要求?
  • 使用 X11 转发服务器界面
  • linux安装mysql ndb cluster
  • 牛客:链表分割算法详解
  • Java设计模式-享元模式
  • FreeRTOS学习笔记(三)--汇编指令
  • C ++代码学习笔记(一)
  • Layui 中的 iframe 详解与最佳实践
  • Linux笔记7——shell编程基础-1
  • SMT车间如何通过防静电监控系统提升产品质量
  • 206.反转链表