好的,使用 SSH 协议解决 Git 推送失败是一个非常常见且有效的方案,特别是当 HTTPS 方式出现认证问题(如频繁要求输入密码、凭证管理器错误)或公司内部网络限制时。
![图片[1]_使用SSH协议解决Git推送失败问题的具体操作方法_知途无界](https://zhituwujie.com/wp-content/uploads/2026/01/d2b5ca33bd20260101125252.png)
下面我将为您提供一个从诊断到解决的完整、详细的操作指南。
核心问题分析:为什么 SSH 能解决推送失败?
Git 推送失败在使用 HTTPS 协议时,通常由以下原因引起:
- 认证失败:用户名/密码错误,或个人访问令牌(PAT)无效/过期。
- 凭证缓存问题:系统凭证管理器存储了错误的旧凭证。
- 网络代理或防火墙:公司网络阻止了 HTTPS 端口(443)的连接。
SSH 协议的优势:
- 密钥认证:使用非对称加密的公钥/私钥对进行认证,无需每次输入密码(除非设置了密钥密码短语)。
- 避免凭证问题:完全绕开了 HTTPS 的密码/PAT 和凭证管理器。
- 穿透力强:通常更容易穿越复杂的网络环境。
具体操作步骤
整个过程分为四大步:1. 检查现有配置 -> 2. 生成 SSH 密钥 -> 3. 将公钥添加到代码托管平台 -> 4. 修改本地仓库的远程地址。
第 1 步:诊断当前状态和检查现有 SSH 密钥
首先,我们确认一下问题是否确实由 HTTPS 引起,并检查是否已经存在 SSH 密钥。
- 检查远程仓库地址:
在你的本地 Git 仓库目录下,打开终端(命令行),执行:git remote -v- 如果使用 HTTPS,你会看到类似这样的地址:
origin https://github.com/your_username/your_repository.git - 如果使用 SSH,你会看到类似这样的地址:
origin git@github.com:your_username/your_repository.git
- 如果使用 HTTPS,你会看到类似这样的地址:
- 测试当前连接方式(可选):
如果你现在用的是 HTTPS,可以尝试推送,复现错误:git push origin main # 或 master,或其他分支名记录下错误信息,通常是Authentication failed之类的。 - 检查现有 SSH 密钥:
在终端中输入以下命令,查看是否已经有 SSH 密钥:ls -al ~/.ssh常见的密钥文件名为:id_rsa和id_rsa.pub(RSA 算法)id_ed25519和id_ed25519.pub(Ed25519 算法,更现代、更安全)
如果这些文件存在,你可以选择使用现有的,或者备份后生成一个新的。
第 2 步:生成新的 SSH 密钥对
如果没有密钥,或者你想为 Git 生成一个专用的密钥,请按以下步骤操作。
- 启动密钥生成器:
在终端中运行以下命令。请将your_email@example.com替换为你 GitHub/GitLab/Gitee 等平台的注册邮箱。ssh-keygen -t ed25519 -C "your_email@example.com"注意:如果你的系统不支持 Ed25519 算法(如较旧的 Windows 系统),可以使用 RSA:ssh-keygen -t rsa -b 4096 -C "your_email@example.com" - 指定保存路径和密码:
执行命令后,会出现以下提示:Enter a file in which to save the key (/Users/you/.ssh/id_ed25519):
直接按回车,使用默认的保存路径和文件名。Enter passphrase (empty for no passphrase):
这里可以为你的密钥设置一个密码短语,增加安全性。每次使用该密钥时都需要输入此密码。如果不想设置,直接按两次回车。(为了方便,新手可以先留空,但生产环境建议设置)。
- 生成完成:
看到类似下面的输出,表示密钥生成成功:Your identification has been saved in /Users/you/.ssh/id_ed25519 Your public key has been saved in /Users/you/.ssh/id_ed25519.pub The key fingerprint is: SHA256:... your_email@example.com The key's randomart image is: +--[ED25519 256]--+ ...
第 3 步:将 SSH 公钥添加到代码托管平台
现在你需要把生成的公钥(.pub 文件的内容)告诉给 GitHub/GitLab/Gitee 等平台。
- 复制公钥内容:
- macOS/Linux:在终端中直接运行以下命令(会自动复制):
pbcopy < ~/.ssh/id_ed25519.pub # 如果是 RSA 密钥,则替换为 id_rsa.pub - Windows (Git Bash):
cat ~/.ssh/id_ed25519.pub | clip - 通用方法(所有系统):用文本编辑器打开
~/.ssh/id_ed25519.pub文件,手动复制全部内容。注意不要多复制空格或换行。
- macOS/Linux:在终端中直接运行以下命令(会自动复制):
- 在平台上添加 SSH 密钥:
- GitHub:
- 点击右上角头像 -> Settings。
- 在左侧边栏中选择 SSH and GPG keys。
- 点击 New SSH key。
- 在 “Title” 中给你的密钥起个名字(如 “My Work Laptop”)。
- 在 “Key type” 中选择 Authentication Key。
- 在 “Key” 的文本框中,粘贴你刚才复制的公钥内容。
- 点击 Add SSH key。
- GitLab:
- 点击右上角头像 -> Preferences。
- 在左侧边栏中选择 SSH Keys。
- 在 “Key” 的文本框中粘贴公钥内容。
- 根据需要设置 “Expiration date”(过期时间)。
- 点击 Add key。
- Gitee(码云):
- 点击右上角头像 -> 设置。
- 在左侧边栏中选择 SSH 公钥。
- 在 “标题” 中填写名称。
- 在 “公钥” 文本框中粘贴内容。
- 点击 确定。
- GitHub:
第 4 步:修改本地仓库的远程地址为 SSH 格式
这是最关键的一步,将你的本地仓库指向 SSH 地址。
- 获取 SSH 格式的远程地址:
在你的 GitHub/GitLab/Gitee 项目页面上,找到 “Code” 按钮,选择 SSH 选项卡,复制提供的地址(格式如:git@github.com:your_username/your_repository.git)。 - 修改本地仓库的远程地址:
在本地仓库的终端中,运行以下命令:git remote set-url origin git@github.com:your_username/your_repository.git请将git@github.com:your_username/your_repository.git替换为你刚刚复制的实际 SSH 地址。 - 验证修改是否成功:
再次运行查看远程地址的命令:git remote -v现在你应该看到origin对应的地址已经是git@...开头的 SSH 格式了。 - 测试 SSH 连接:
在终端中运行以下命令来测试与 GitHub 的连接(其他平台请替换域名):ssh -T git@github.com你可能会看到类似这样的警告:The authenticity of host 'github.com (IP ADDRESS)' can't be established. ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. Are you sure you want to continue connecting (yes/no)?输入 **yes** 并按回车。
如果成功,你会看到一条欢迎信息:Hi your_username! You've successfully authenticated, but GitHub does not provide shell access. - 尝试推送:
现在,再次执行推送命令,应该可以成功了!git push origin main如果之前设置了密钥密码短语,这时会提示你输入。如果没设置,则会直接推送成功。
常见问题排查
- 权限错误 (
Permissions 0644 for 'id_rsa' are too open):
SSH 对密钥文件的权限要求非常严格。确保~/.ssh目录权限为700,私钥文件(如id_rsa)权限为600。chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa # 或你的私钥文件名 - **
ssh -T测试连接失败**:- 检查公钥是否完整、正确地复制到了网站上。
- 检查本地私钥是否存在且与公钥匹配。
- 检查网络环境是否有防火墙阻止了 SSH 端口(默认 22)。有些公司网络会封禁此端口,可以尝试使用 HTTPS-over-SSH 的端口(如 443)或联系网络管理员。
通过以上步骤,绝大多数因 HTTPS 认证导致的 Git 推送失败问题都可以得到解决。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END

























暂无评论内容