从零到一:基于SSH密钥实现Git项目安全推送至GitHub
1. 为什么密码登录GitHub不安全SSH密钥来救场嘿朋友们我是老张在AI和智能硬件这行摸爬滚打了十几年代码没少写GitHub更是我的第二个家。刚开始用Git往GitHub上推送代码那会儿我也和很多新手一样老老实实用账号密码登录。但没过多久我就发现这方法不仅麻烦而且心里总有点不踏实。每次推送都要输一遍密码万一电脑被偷看了呢更别提GitHub早就宣布要逐步淘汰这种认证方式了。所以今天我想跟你聊聊一个更安全、更省心的一劳永逸之法SSH密钥认证。你可以把它想象成给你家GitHub仓库配了一把独一无二的“物理钥匙”和一把公开的“锁”。这把“钥匙”私钥永远只保存在你自己的电脑上绝不外传而“锁”公钥则交给GitHub保管。当你想要推送代码时你的电脑用“钥匙”去开GitHub那里的“锁”匹配上了门就开了。整个过程完全不需要你在网络上传输密码从根本上杜绝了密码被截获的风险。这不仅仅是方便更是一种安全习惯的建立。尤其是在今天我们的代码可能就是最核心的资产。使用SSH密钥意味着即使有人知道了你的GitHub账号没有你电脑上的那把私钥他也绝对进不去。接下来我就手把手带你从零开始把这套安全体系搭建起来让你以后推送代码都能既安全又顺畅。2. 万事开头易你的本地环境准备在开始制作我们的“钥匙”之前得先确保“工作台”——也就是你的电脑——已经准备好了必要的工具。这个过程非常简单几乎就是“下一步、下一步”的点按操作。2.1 Git的安装与验证Git是我们的核心工具没有它一切都无从谈起。无论你是用Windows、macOS还是Linux安装Git都异常简单。对于Windows用户我强烈建议你直接去 Git 官网 下载那个叫做“Git for Windows”的安装包。安装过程中你会看到一个选项叫“Git Bash”务必勾选上。它是什么它是一个在Windows上模拟Linux命令行环境的工具我们后续所有操作都在这里面进行非常方便。安装时其他选项保持默认就好一路点击“Next”直到完成。对于macOS用户你有两种选择。一是打开“终端”Terminal输入命令xcode-select --install来安装命令行工具其中就包含了Git。另一种更推荐的方法是使用包管理器Homebrew在终端里输入brew install git即可。对于Linux用户打开你的终端根据发行版使用对应的包管理器安装。比如在Ubuntu或Debian上命令是sudo apt install git。安装完成后我们需要验证一下。打开你的命令行工具Windows用户请打开刚刚安装好的“Git Bash”输入下面这个简单的命令git --version如果安装成功你会立刻看到类似git version 2.39.2这样的版本信息。看到这个恭喜你第一步已经稳稳迈出了。2.2 认识你的命令行家园对于刚接触命令行的朋友看到黑乎乎的窗口可能会有点发怵。别担心我们不需要成为命令行大师只需要认识几个基本状态就行。在Git Bash或终端里你通常会看到一串路径比如~/Projects这表示你当前所在的文件夹位置。我们后续生成密钥、初始化仓库等操作都和当前所在路径息息相关。一个我经常分享的小技巧是在开始之前先用pwd命令Print Working Directory看看自己在哪然后用cd命令Change Directory切换到你的项目文件夹。比如我想在桌面的MyCode文件夹里操作就可以在Git Bash里输入cd ~/Desktop/MyCode环境准备好了我们的“工作台”已经就绪接下来就要动手打造那把独一无二的“安全钥匙”了。3. 打造专属密钥生成与配置SSH密钥对这是整个流程中最核心、也最具魔法的一步。我们要创建一对非对称加密的密钥一个私钥一个公钥。记住一个铁律私钥如银行卡密码打死也不能给别人看公钥如银行卡号可以放心地告诉GitHub。3.1 一键生成你的密钥对打开Git Bash或终端我们输入一行命令就能完成创建。目前最推荐、也最安全的算法是Ed25519它比旧的RSA算法更快、更安全。ssh-keygen -t ed25519 -C your_emailexample.com这里的-C参数后面跟的注释通常用你的邮箱。这个注释会附在公钥末尾帮你以后区分这把钥匙是哪个设备用的比如“张三的办公笔记本”。直接回车执行命令。接下来命令行会和你进行几次简单的交互第一个提示Enter file in which to save the key (/c/Users/YourName/.ssh/id_ed25519):这是问你把密钥文件保存在哪里。直接按回车使用它推荐的默认路径就好。这个路径下会自动生成一个隐藏的.ssh文件夹来存放你的密钥。第二个提示Enter passphrase (empty for no passphrase):这是询问你是否为私钥设置一个“通行短语”。我强烈建议你设置一个这相当于给你的私钥又加了一道密码锁。即使私钥文件不慎泄露没有这个短语别人也无法使用。输入你的短语屏幕上不会显示星号正常输入即可然后回车。它会让你再输入一次确认。完成看到类似下面的输出就表示成功了Your identification has been saved in /c/Users/YourName/.ssh/id_ed25519 Your public key has been saved in /c/Users/YourName/.ssh/id_ed25519.pub现在去文件管理器里看看可能需要开启显示隐藏文件在用户主目录的.ssh文件夹下你应该能找到两个新文件id_ed25519你的私钥和id_ed25519.pub你的公钥。3.2 启动密钥管家SSH Agent生成了钥匙我们还需要一个“钥匙管家”来帮我们管理和使用它这个管家就叫ssh-agent。它会在后台运行记住你的私钥和通行短语这样你就不需要每次连接都重复输入了。首先确保管家已经启动。在终端里输入eval $(ssh-agent -s)你会看到类似Agent pid 12345的反馈表示管家已上线。接下来把我们的私钥交给管家保管ssh-add ~/.ssh/id_ed25519如果当初你设置了通行短语这时会提示你输入一次。输入正确后管家就会把私钥加载到内存中。你可以用ssh-add -l命令来查看当前管家都管理着哪些钥匙。4. 交付公钥在GitHub上建立信任关系现在我们有了“钥匙”私钥自己保管和“锁”公钥。接下来要把这把“锁”安装到GitHub的大门上告诉GitHub“以后看到拿着对应钥匙的人就让他进来。”4.1 复制你的公钥我们需要把公钥文件的内容完整地复制出来。在终端里用cat命令查看并复制是最稳妥的方式cat ~/.ssh/id_ed25519.pub终端会显示出一长串以ssh-ed25519开头、以你的邮箱注释结尾的字符。这就是你的公钥。用鼠标仔细选中从开头到结尾的全部内容包括ssh-ed25519和你的邮箱然后复制它。确保没有多一个空格也没有少一个字母。4.2 在GitHub账户中添加SSH Key登录你的GitHub账号点击右上角你的头像选择Settings设置。在左侧边栏中找到并点击SSH and GPG keys。点击绿色的New SSH key按钮。这时会看到一个表单Title标题给你这把钥匙起个容易识别的名字比如“My MacBook Pro 2023”或“公司台式机”。这有助于你未来管理多台设备。Key type密钥类型保持默认的“Authentication Key”即可。Key密钥将刚才复制的整个公钥内容粘贴到这个大文本框里。最后点击Add SSH key。添加成功后你就能在列表里看到它了。这一步就像是在GitHub的保险柜里存入了你公钥这把“锁”的模具。至此你和GitHub之间的安全信道信任关系就建立好了。5. 本地Git的初次见面礼基础配置在开始推送代码之前我们还需要给本地的Git做一下简单的自我介绍。这样当你提交代码时Git才知道是谁做了这些伟大的工作。配置非常简单只需要两行命令而且是全局设置对这台电脑上所有Git仓库生效git config --global user.name Your Name git config --global user.email your_emailexample.com把Your Name换成你想用的名字比如“张三”把your_emailexample.com换成你注册GitHub时用的邮箱。这个邮箱非常重要它最好和你在GitHub上设置的主邮箱一致这样你的提交活动才能正确地关联到你的GitHub账户。你可以用git config --global --list命令来检查配置是否生效。看到user.name和user.email都正确显示就说明没问题了。这个配置是一次性的以后在这台电脑上操作任何Git仓库都不需要再设置。6. 实战演练安全推送你的第一个项目理论准备全部完成是时候真刀真枪地操作了让我们把一个本地项目通过SSH安全地推送到GitHub的新仓库里。我会假设你已经在电脑上有一个写好了代码的项目文件夹。6.1 在GitHub上创建新仓库首先我们需要在GitHub上建立一个“目的地”。登录GitHub点击右上角的加号选择New repository。给你的仓库起个名字比如my-awesome-project写一段简短的描述选择公开Public或私有Private。下面有一个非常关键的选项“Initialize this repository with a README” 这个复选框现在不要勾选因为我们是要推送一个已有的本地项目如果勾选了GitHub会创建一个有初始提交的空仓库反而会增加合并的麻烦。直接点击Create repository即可。创建成功后你会看到一个快速设置页面。注意看页面上方有一排选项如“HTTPS”、“SSH”、“GitHub CLI”。请确保你选中了“SSH”。这时你会看到一个以gitgithub.com:开头的仓库地址把它记下来我们马上要用。6.2 初始化本地仓库并关联远程现在回到你的命令行用cd命令进入你的本地项目文件夹。然后执行以下命令序列# 1. 在当前目录初始化一个全新的Git仓库 git init # 2. 将本地仓库与刚刚创建的GitHub远程仓库关联起来 # 将下面的地址换成你刚刚复制的、以 gitgithub.com: 开头的地址 git remote add origin gitgithub.com:your-username/my-awesome-project.git这里的origin是一个别名它代表了你关联的那个远程仓库地址。以后你想推送代码说“推到origin”就行了非常方便。6.3 提交代码并完成首次安全推送关联好远程仓库后就可以把本地的代码文件纳入Git的管理并推送上去了。# 3. 将当前目录下的所有文件.开头隐藏文件除外添加到暂存区 # 你也可以用 git add 文件名 来添加特定文件 git add . # 4. 将暂存区的内容创建为一个正式的提交并附上说明信息 git commit -m Initial commit: project setup # 5. 将本地的主分支重命名为 mainGitHub的默认主分支名 git branch -M main # 6. 执行推送-u 参数表示将本地main分支与远程origin/main分支关联起来 git push -u origin main当你输入git push -u origin main并回车的那一刻魔法发生了。你的命令行会显示上传的进度。因为是第一次通过SSH连接你可能会看到这样一句话The authenticity of host github.com (IP地址) cant be established. ED25519 key fingerprint is SHA256:一串指纹. Are you sure you want to continue connecting (yes/no/[fingerprint])?这是在问“我首次连接github.com这个主机这是它的指纹你信任它吗” 输入yes并回车。这会把GitHub服务器的指纹记录在你的known_hosts文件里下次连接就不会再问了。之后如果一切顺利你会看到一系列对象计数、压缩、写入的提示最后出现branch main set up to track origin/main.这样的成功信息。打开你的GitHub仓库页面刷新一下你的代码已经安然无恙地躺在那里了整个过程没有输入一次GitHub密码全部由SSH密钥在后台默默完成了安全认证。7. 遇到问题别慌张常见故障排查指南即使按照步骤来有时也可能遇到一些小波折。别担心这都是学习过程的一部分。我把自己和朋友们常踩的坑总结了一下你遇到问题可以先来这里找找答案。7.1 权限被拒绝 (Permission Denied)这是最常见的问题错误信息通常包含Permission denied (publickey)。这根本原因是GitHub不认你提供的“钥匙”。请按以下顺序检查检查公钥是否添加正确再次登录GitHub的SSH keys设置页面确认公钥确实存在。最稳妥的方式是用命令cat ~/.ssh/id_ed25519.pub重新复制一遍公钥和GitHub上保存的进行逐字对比确保完全一致没有多余的空格或换行。检查SSH Agent是否加载了私钥运行ssh-add -l。如果列表是空的说明私钥没加载。重新执行ssh-add ~/.ssh/id_ed25519并输入通行短语。测试SSH连接运行ssh -T gitgithub.com。这是专门用来测试与GitHub SSH连接的命令。成功的响应应该是Hi your-username! Youve successfully authenticated, but GitHub does not provide shell access.如果失败它会给出更具体的错误信息。7.2 连接超时或端口问题在某些网络环境下比如一些公司内网或校园网直接连接GitHub的默认SSH端口22可能会被阻断。解决方案GitHub非常贴心地为SSH提供了在443端口上的备用接入方式。你可以通过修改SSH客户端配置来使用它。打开或创建~/.ssh/config文件没有的话就新建一个添加以下几行Host github.com Hostname ssh.github.com Port 443 User git保存后再尝试ssh -T gitgithub.com或进行git push操作。这个配置告诉你的SSH客户端以后所有连接github.com的请求都实际走ssh.github.com的443端口HTTPS端口通常这个端口不会被封锁。7.3 仓库地址关联错误如果你在执行git push时提示remote: Repository not found.或者认证通过了但说没权限很可能是一开始关联远程仓库的地址弄错了。检查当前关联的远程地址git remote -v如果是HTTPS地址它会显示https://github.com/...开头。你需要移除它重新添加SSH地址。git remote remove origin git remote add origin gitgithub.com:your-username/repo-name.git如果是SSH地址但用户名/仓库名错了同样先移除再重新添加正确的。把这些常见问题的解决方法放在手边能帮你节省大量搜索和焦虑的时间。记住几乎所有SSH连接问题都可以通过ssh -T gitgithub.com这个测试命令来获得第一线索。走到这里你已经完成了一个完整的、基于SSH密钥的Git项目安全推送闭环。从生成密钥、配置GitHub、到最终推送成功每一步背后的安全逻辑其实都很清晰用非对称加密代替密码传输用本地私钥证明身份。这套方法一旦设置好就是永久生效的以后在这台电脑上操作任何GitHub仓库都会畅通无阻。我自己的多台开发机和服务器都是这么配置的再也没为推送认证烦心过。安全又便捷何乐而不为呢下次如果你换新电脑只需要把新电脑生成的SSH公钥再添加到GitHub账户里就能多设备协同工作了管理起来也非常直观。

相关新闻

IPD流程改造日记:我们如何用3个月让产品迭代速度提升40%

IPD流程改造日记:我们如何用3个月让产品迭代速度提升40%

IPD流程改造日记:我们如何用3个月让产品迭代速度提升40% 去年第三季度,我们团队经历了一场“阵痛”。作为一家两百人规模的中型科技公司,产品线从两条扩展到五条,原本顺畅的月度发布节奏开始变得磕磕绊绊。需求评审会从两小时拖成…

2026/7/6 0:17:42 阅读更多 →
DCCRN vs CRN:深度对比复数网络在语音增强中的性能差异

DCCRN vs CRN:深度对比复数网络在语音增强中的性能差异

DCCRN vs CRN:复数网络如何重塑语音增强的竞争格局 在嘈杂的咖啡馆里进行一场重要的视频会议,或是通过智能音箱在厨房的油烟机轰鸣声中下达指令,这些日常场景正考验着语音交互技术的极限。语音增强,这项旨在从背景噪声中“打捞”出…

2026/7/6 0:17:41 阅读更多 →
5G终端省电黑科技:手把手教你配置WUS功能(附CDRX对比实验)

5G终端省电黑科技:手把手教你配置WUS功能(附CDRX对比实验)

5G终端功耗优化实战:深入WUS配置与CDRX对比实验 在5G终端开发与网络优化的一线工作中,工程师们面临的一个永恒挑战,是如何在提供极致数据速率和低时延的同时,有效延长终端的电池续航。这不仅仅是提升用户体验的关键,更…

2026/7/3 18:56:14 阅读更多 →

最新新闻

Service Mesh 策略治理:配置多了,也会变成事故源

Service Mesh 策略治理:配置多了,也会变成事故源

Service Mesh 策略治理:配置多了,也会变成事故源 一、网格配置不是越多越安全 Service Mesh 提供流量治理、mTLS、熔断、重试、限流、镜像流量等能力。能力强是一回事,配置多是另一回事。多个 VirtualService、DestinationRule、Authorizatio…

2026/7/6 0:17:22 阅读更多 →
LSTM 时间序列预测实战:基于3000期双色球数据,构建7维序列模型

LSTM 时间序列预测实战:基于3000期双色球数据,构建7维序列模型

LSTM时间序列预测实战:基于3000期双色球数据的7维序列建模引言:当深度学习遇见概率游戏每次双色球开奖时,那些在彩票站盯着走势图沉思的身影总让人好奇——是否存在某种数学规律能穿透随机性的迷雾?作为数据科学家,我们…

2026/7/6 0:15:20 阅读更多 →
Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析

Cartographer ROS Noetic 仿真建图实战:Gazebo+Rviz 完整流程与 3 个关键配置文件解析

Cartographer ROS Noetic 仿真建图实战:GazeboRviz 完整流程与 3 个关键配置文件解析当我们需要在仿真环境中验证SLAM算法时,Cartographer与Gazebo的组合提供了一个理想的测试平台。本文将深入探讨如何在ROS Noetic环境下,通过精心配置三个核…

2026/7/6 0:15:20 阅读更多 →
POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践

POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践

POSIX 1003.1 标准解析:从 fork/exec 到 72 个系统调用的可移植性实践在跨平台软件开发中,操作系统接口的差异一直是工程师面临的主要挑战之一。POSIX(Portable Operating System Interface)标准作为Unix-like系统的通用接口规范&…

2026/7/6 0:15:20 阅读更多 →
位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战:从BERT 512到26万token的3种延拓策略

位置编码外推实战:从BERT 512到26万token的3种延拓策略当处理长文本序列时,BERT等Transformer模型面临一个根本性限制——位置编码的长度约束。传统BERT模型最多只能处理512个token,这严重制约了其在长文档理解、基因组分析等场景的应用潜力。…

2026/7/6 0:11:20 阅读更多 →
如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击:AutoClicker鼠标自动化完全指南

如何彻底告别重复点击:AutoClicker鼠标自动化完全指南 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 还在为每天重复的鼠标点击任务感到疲惫吗…

2026/7/6 0:11:20 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻