【MAC】解决 GitHub `git push` 无法通过 HTTPS 推送的问题 —— 使用 SSH 方式

在使用 Git 进行版本控制和代码托管时,git push 操作是常见的任务。然而,有时您可能会遇到无法通过 HTTPS 推送代码到 GitHub 的问题。本文将详细介绍如何通过配置 SSH 连接,解决 git push 无法通过 HTTPS 推送的问题。

目录

  1. 问题描述
  2. 问题分析
  3. 解决方案概述
  4. 详细步骤
  5. 补充说明
  6. 常见问题及解决方法
  7. 总结

问题描述

在尝试使用 git push 命令将本地代码推送到 GitHub 仓库时,遇到以下错误:

fatal: unable to access 'https://github.com/SIGN369/apocalypse.git/': Failed to connect to github.com port 443 after 75001 ms: Couldn't connect to server

尽管您可以正常访问 GitHub 网站,但 git push 操作仍然失败。这表明 HTTPS 方式的 Git 操作存在连接问题

问题分析

出现上述错误可能有多种原因:

  1. 网络连接问题:本地网络无法稳定连接到 GitHub 的 443 端口。
  2. 防火墙或安全软件阻止:本地防火墙或公司网络策略可能阻止了对 GitHub 的 HTTPS 访问。
  3. Git 配置问题:Git 可能配置了错误的代理或存在其他配置问题。
  4. DNS 解析问题:DNS 无法正确解析 github.com 域名。
  5. SSL 证书验证失败:系统时间不正确或证书过期导致 SSL 验证失败。

由于 HTTPS 方式可能受到上述因素的影响,切换到 SSH 方式通常可以有效绕过这些问题。

解决方案概述

本文将指导您通过以下步骤,使用现有的 Ed25519 SSH 密钥 配置 Git 与 GitHub 的 SSH 连接,从而解决 git push 无法通过 HTTPS 推送的问题:

  1. 检查现有的 SSH 密钥
  2. 启动 SSH Agent 并添加现有的 Ed25519 私钥
  3. 将 Ed25519 公钥添加到 GitHub 账户
  4. 验证 SSH 连接
  5. 将 Git 远程仓库地址修改为 SSH 格式
  6. 尝试推送代码

详细步骤

步骤一:检查现有的 SSH 密钥

首先,确认系统中是否已经存在 SSH 密钥对,特别是 Ed25519 类型的密钥。

  1. 打开终端

  2. 列出 .ssh 目录中的文件

    ls -al ~/.ssh
    

    示例输出:

    total 32
    drwxr-xr-x@  6 sign  staff   192 Nov 15 14:57 .
    drwxr-x---+ 84 sign  staff  2688 Nov 30 02:59 ..
    -rw-------@  1 sign  staff   464 Aug  8 15:33 id_ed25519
    -rw-r--r--@  1 sign  staff   103 Aug  8 15:33 id_ed25519.pub
    -rw-------@  1 sign  staff  1953 Nov 15 14:57 known_hosts
    -rw-------@  1 sign  staff  1195 Nov 15 14:56 known_hosts.old
    

    从输出中看已经有 id_ed25519(私钥)和 id_ed25519.pub(公钥)文件。已经有一个 Ed25519 类型的 SSH 密钥对,无需生成新的 RSA 密钥对。

步骤二:启动 SSH Agent 并添加现有的 Ed25519 私钥

  1. 启动 SSH Agent

    eval "$(ssh-agent -s)"
    

    示例输出:

    Agent pid 59566
    
  2. 添加 Ed25519 私钥到 SSH Agent

    ssh-add ~/.ssh/id_ed25519
    

    如果在生成密钥时设置了密码短语,系统会提示您输入。

    注意:确保使用的是正确的私钥文件路径和名称。如果密钥文件有自定义名称,请相应修改命令。

步骤三:将 Ed25519 公钥添加到 GitHub 账户

  1. 复制公钥内容

    使用以下命令将公钥内容复制到剪贴板:

    pbcopy < ~/.ssh/id_ed25519.pub
    

    说明pbcopy 是 macOS 上的命令,用于将输入内容复制到剪贴板。如果您没有 pbcopy,可以手动复制:

    cat ~/.ssh/id_ed25519.pub
    

    然后手动复制输出的内容。

  2. 登录 GitHub 账户

  3. 导航到 SSH 密钥设置

    • 点击右上角的 头像,选择 Settings(设置)
    • 在左侧菜单中,点击 SSH and GPG keys
  4. 添加新的 SSH 密钥

    • 点击 New SSH key 按钮。
    • 标题(Title):为您的密钥命名,例如 My MacBook Pro
    • 密钥(Key):在此处粘贴您刚刚复制的公钥内容。
    • 点击 Add SSH key

    添加 SSH 密钥

步骤四:验证 SSH 连接

在终端中运行以下命令,测试与 GitHub 的 SSH 连接:

ssh -T git@github.com

输出:

Hi SIGN369! You've successfully authenticated, but GitHub does not provide shell access.
  • 成功连接:表示 SSH 连接已正确配置。
  • 首次连接警告:如果这是您第一次通过 SSH 连接 GitHub,系统可能会提示您确认主机。输入 yes 以继续。

常见问题

  • Permission denied (publickey).

    解决方法

    • 确认公钥已正确添加到 GitHub。
    • 确保私钥已添加到 SSH Agent。
    • 检查公钥文件是否完整无误。

步骤五:将 Git 远程仓库地址修改为 SSH 格式

当前,您的 Git 远程仓库可能使用的是 HTTPS 地址。为了使用 SSH 进行推送,您需要将远程地址修改为 SSH 格式。

  1. 查看当前远程仓库地址

    git remote -v
    

    示例输出

    origin  https://github.com/SIGN369/apocalypse.git (fetch)
    origin  https://github.com/SIGN369/apocalypse.git (push)
    
  2. 将远程地址修改为 SSH 格式

    git remote set-url origin git@github.com:SIGN369/apocalypse.git
    
  3. 验证远程地址是否修改成功

    git remote -v
    

    示例输出

    origin  git@github.com:SIGN369/apocalypse.git (fetch)
    origin  git@github.com:SIGN369/apocalypse.git (push)
    

步骤六:尝试推送代码

现在,您可以尝试使用 SSH 方式推送代码。

  1. 推送到主分支(mainmaster

    根据您的分支名称,运行以下命令:

    git push origin main
    

    或者

    git push origin master
    
  2. 成功推送

    成功示例输出

    Counting objects: 5, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 300 bytes | 300.00 KiB/s, done.
    Total 3 (delta 1), reused 0 (delta 0)
    To git@github.com:SIGN369/apocalypse.git
       abcdef1..1234567  main -> main
    

    这表示代码已成功推送到 GitHub 仓库。


补充说明

1. 多个 SSH 密钥的配置

如果在同一台机器上使用多个 SSH 密钥(例如用于不同的 GitHub 账户),需要配置 SSH config 文件来指定每个仓库使用的密钥。

编辑或创建 ~/.ssh/config 文件

nano ~/.ssh/config

添加以下内容

# GitHub account 1
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519

保存并退出(在 nano 中,按 Ctrl + O 保存,Ctrl + X 退出)。

2. 权限设置

确保您的 .ssh 目录和密钥文件具有正确的权限,以确保 SSH 安全性。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

常见问题及解决方法

1. ssh-add 报错:Could not open a connection to your authentication agent.

解决方法

确保 SSH Agent 已启动:

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

2. Permission denied (publickey).

可能原因

  • 公钥未正确添加到 GitHub。
  • 使用了错误的 SSH 密钥。
  • SSH Agent 未添加私钥。

解决方法

  • 确认公钥已添加到 GitHub

  • 确保使用正确的私钥

  • 检查 SSH Agent 是否已添加私钥

    ssh-add -l
    

    如果没有列出您的密钥,添加它:

    ssh-add ~/.ssh/id_ed25519
    

3. GitHub 不识别您的 SSH 密钥

解决方法

  • 确保公钥完整无误地添加到 GitHub
  • 检查是否有多余的空格或换行
  • 重新生成并添加新的 SSH 密钥

end

通过以上步骤,成功配置 SSH 连接,从而解决 git push 无法通过 HTTPS 推送代码到 GitHub 的问题。使用 SSH 不仅可以绕过 HTTPS 连接中的网络问题,还能提高操作的安全性。

关键步骤回顾

  1. 检查并使用现有的 SSH 密钥(Ed25519)。
  2. 启动 SSH Agent 并添加私钥
  3. 将公钥添加到 GitHub 账户
  4. 验证 SSH 连接
  5. 将 Git 远程仓库地址修改为 SSH 格式
  6. 尝试推送代码

posted on 2024-11-30 03:14  滚动的蛋  阅读(51)  评论(0编辑  收藏  举报

导航