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 绑定邮箱)
系统会询问以下问题:
-
Enter file in which to save the key(~/.ssh/id_rsa)(默认回车)- 直接回车,使用默认路径(推荐)
- 如果已有密钥,可以换个名字,如 id_rsa_github
-
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:
bashclip < ~/.ssh/id_rsa.pub -
macOS:
bashpbcopy < ~/.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
验证原理
SSH登录安全性由非对称加密保证,产生密钥时,一次产生两个密钥,一个公钥,一个私钥,在 git 中一般命名为id_rsa.pub, id_rsa。
那么如何使用生成的一个私钥一个公钥进行验证呢?
本地生成一个密钥对,其中公钥放到远程主机,私钥保存在本地
当本地主机需要登录远程主机时,本地主机向远程主机发送一个登录请求,远程收到消息后,随机生成一个字符串并用公钥加密,发回给本地。本地拿到该字符串,用存放在本地的私钥进行解密,再次发送到远程,远程比对该解密后的字符串与源字符串是否等同,如果等同则认证成功。
通俗解释!!
重点来了: 一定要知道 ssh key 的配置是针对每台主机的! 比如我在某台主机上操作 git 和我的远程仓库,想要 push 时不输入账号密码,走 ssh 协议,就需要配置 ssh key,放上去的 key 是当前主机的 ssh 公钥。那么如果我换了一台其他主机,想要实现无密登录,也就需要重新配置。
- 为什么要配?
配了才能实现 push 代码的时候不需要反复输入自己的 github 账号密码,更方便 - 每使用一台主机都要配?
是的,每使用一台新主机进行 git 远程操作,想要实现无密,都需要配置。并不是说每个账号配一次就够了,而是每一台主机都需要配。 - 配了为啥就不用密码了?
因为配置的时候是把当前主机的公钥放到了你的 github 账号下,相当于当前主机和你的账号做了一个关联,你在这台主机上已经登录了你的账号,此时此刻 github 认为是该账号主人在操作这台主机,在配置 ssh 后就信任该主机了。所以下次在使用 git 的时候即使没有登录 github,也能直接从本地 push 代码到远程了。当然这里不要混淆了,你不能随意 push 你的代码到任何仓库,你只能 push 到你自己的仓库或者其他你有权限的仓库!