Git配置SSH Key到GitHub的详细教程

Git配置SSH Key到GitHub的详细教程

前言

在往 github 上 push 项目的时候,如果走 https 的方式,每次都需要输入账号密码,非常麻烦。而采用 ssh 的方式,就不再需要输入,只需要在 github 自己账号下配置一个 ssh key 即可。

配置 SSH

1. 检查是否已有 SSH Key

在 Git Bash(Windows) 、终端(Linux/macOS) 运行以下命令:

bash 复制代码
# 查看是否已存在密钥
ls -al ~/.ssh

如果看到以下文件,说明已有密钥:

  • id_rsa(私钥)
  • id_rsa.pub(公钥)

可以跳到第4步直接添加到 GitHub

2. 生成新的 SSH Key(如果没有)

bash 复制代码
# 生成新的 SSH 密钥
ssh-keygen -t rsa -b 4096 -C "[这里输入你的邮箱]"

参数说明

  • -t rsa:使用 RSA 算法
  • -b 4096:密钥长度 4096 位(比默认 2048 位更安全)
  • -C "邮箱":密钥的注释标识(通常是你的 GitHub 绑定邮箱)

系统会询问以下问题

  1. Enter file in which to save the key(~/.ssh/id_rsa)(默认回车)

    • 直接回车,使用默认路径(推荐)
    • 如果已有密钥,可以换个名字,如 id_rsa_github
  2. Enter passphrase (输入密码,可以为空)

    建议直接回车(否则每次使用SSH都要输入密码)

生成成功后,会在 ~/.ssh/ 目录下创建两个文件:

bash 复制代码
~/.ssh/id_rsa      # 私钥(不要分享)
~/.ssh/id_rsa.pub  # 公钥(需要添加到 GitHub/GitLab)

执行过程

bash 复制代码
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/yaoheng/.ssh/id_rsa): [直接按 Enter]
Enter passphrase (empty for no passphrase): [输入密码或直接回车]
Enter same passphrase again: [再次输入密码或回车]

3. 启动 SSH Agent 并添加密钥

bash 复制代码
# 启动 SSH agent(用于管理密钥)
eval "$(ssh-agent -s)"
# 应该显示:Agent pid XXXX

# 添加私钥到 SSH agent
ssh-add ~/.ssh/id_rsa
# 如果你的私钥文件名不是 id_rsa,请修改为实际名称
# 如果设置了密码,会提示输入

# 验证密钥已添加
ssh-add -l
# 应该显示你的密钥信息

4. 复制公钥到剪贴板

bash 复制代码
# 查看公钥内容
cat ~/.ssh/id_rsa.pub

复制公钥的方法:

  • Windows Git Bash:

    bash 复制代码
    clip < ~/.ssh/id_rsa.pub
  • macOS:

    bash 复制代码
    pbcopy < ~/.ssh/id_rsa.pub
  • 手动复制

5. 添加公钥到 GitHub

进入 Settings 设置

6. 测试 SSH 连接

bash 复制代码
# 测试连接 GitHub
ssh -T git@github.com

成功提示:

bash 复制代码
Hi yourName! You've successfully authenticated, but GitHub does not provide shell access.

7. 设置 Git 使用 SSH 方式拉取代码

默认情况下,Git 可能还在使用 HTTPS,需要手动改为 SSH。

设置全局 Git 远程 URL 方式:

bash 复制代码
git config --global url."git@github.com:".insteadOf "https://github.com/"

设置成功后,即可不需要账号密码 clone 和 push 代码

注意之后在clone仓库的时候要使用ssh的url,而不是https

验证原理

以下内容出自Github配置ssh key的步骤(大白话+包含原理解释)

SSH登录安全性由非对称加密保证,产生密钥时,一次产生两个密钥,一个公钥,一个私钥,在 git 中一般命名为id_rsa.pub, id_rsa。

那么如何使用生成的一个私钥一个公钥进行验证呢?

本地生成一个密钥对,其中公钥放到远程主机,私钥保存在本地

当本地主机需要登录远程主机时,本地主机向远程主机发送一个登录请求,远程收到消息后,随机生成一个字符串并用公钥加密,发回给本地。本地拿到该字符串,用存放在本地的私钥进行解密,再次发送到远程,远程比对该解密后的字符串与源字符串是否等同,如果等同则认证成功。

通俗解释!!

重点来了: 一定要知道 ssh key 的配置是针对每台主机的! 比如我在某台主机上操作 git 和我的远程仓库,想要 push 时不输入账号密码,走 ssh 协议,就需要配置 ssh key,放上去的 key 是当前主机的 ssh 公钥。那么如果我换了一台其他主机,想要实现无密登录,也就需要重新配置。

  1. 为什么要配?
    配了才能实现 push 代码的时候不需要反复输入自己的 github 账号密码,更方便
  2. 每使用一台主机都要配?
    是的,每使用一台新主机进行 git 远程操作,想要实现无密,都需要配置。并不是说每个账号配一次就够了,而是每一台主机都需要配。
  3. 配了为啥就不用密码了?
    因为配置的时候是把当前主机的公钥放到了你的 github 账号下,相当于当前主机和你的账号做了一个关联,你在这台主机上已经登录了你的账号,此时此刻 github 认为是该账号主人在操作这台主机,在配置 ssh 后就信任该主机了。所以下次在使用 git 的时候即使没有登录 github,也能直接从本地 push 代码到远程了。当然这里不要混淆了,你不能随意 push 你的代码到任何仓库,你只能 push 到你自己的仓库或者其他你有权限的仓库!
相关推荐
闲云一鹤1 天前
Git LFS 扫盲教程 - 你不会还在用 Git 管理大文件吧?
前端·git·前端工程化
砖厂小工1 天前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github
程序员鱼皮1 天前
又一个新项目完结,我要出海了!
ai·github·开源项目
徐小夕1 天前
pxcharts-vue:一款专为 Vue3 打造的开源多维表格解决方案
前端·vue.js·github
Moment1 天前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
我叫黑大帅1 天前
前端如何利用 GitHub Actions 自动构建并发布到 GitHub Pages?
前端·面试·github
HelloGitHub1 天前
这个年轻的开源项目,想让每个人都能拥有自己的专业级 AI 智能体
开源·github·agent
刘发财2 天前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
sunny8652 天前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github