一、SSH 是什么
SSH(Secure Shell)是一种加密网络协议。在 Git 场景下,SSH 密钥对用来代替密码向 GitHub 证明身份。
核心原理:
- 私钥留在本地电脑,永远不要分享
- 公钥上传到 GitHub
- 推送/拉取代码时,本地用私钥签名,GitHub 用公钥验证
二、配置流程(共 6 步)
步骤 1:检查是否已有 SSH 密钥
|
|
命令拆解:
ls:list,列出目录下的文件-a:显示所有文件(包括.开头的隐藏文件)-l:以长格式显示(权限、大小、日期等)~:用户主目录,Windows 上即C:\Users\用户名.ssh/:SSH 配置目录(隐藏文件夹)
如果看到 id_ed25519 和 id_ed25519.pub,说明已有密钥,可跳过步骤 2。
如果只有 known_hosts 或目录为空,说明没有密钥,继续下一步。
步骤 2:生成新的 SSH 密钥
|
|
命令拆解:
ssh-keygen:SSH 密钥生成工具-t ed25519:指定算法为 Ed25519(比 RSA 更短更安全更快,目前最推荐)-C "邮箱":注释,方便日后识别密钥归属
执行后两个交互提示:
- 保存位置 → 直接回车,使用默认路径
~/.ssh/id_ed25519 - passphrase(口令) → 可留空回车,也可设密码保护私钥
生成结果:.ssh/ 下出现两个文件:
id_ed25519→ 私钥(不要分享)id_ed25519.pub→ 公钥(上传到 GitHub)
步骤 3:启动 ssh-agent 并添加私钥
|
|
命令拆解:
ssh-agent:后台运行的密钥管理器,管理你的私钥,避免每次 git 操作都重复认证-s:输出适合 shell 使用的格式eval "$(…)":将 ssh-agent 输出的环境变量在当前 shell 中生效ssh-add:将私钥交给 agent 管理
成功标志:
Agent pid XXXX(agent 已启动)Identity added: /c/Users/…/.ssh/id_ed25519(私钥已加载)
步骤 4:复制公钥
|
|
命令拆解:
cat:concatenate,将文件内容输出到屏幕
会输出一行以 ssh-ed25519 开头的字符串,完整复制这一行,下一步要用。
⚠️ 注意复制的是
.pub公钥文件,不要复制私钥!
步骤 5:将公钥添加到 GitHub
浏览器操作:
- 打开 https://github.com/settings/keys
- 点击 New SSH key
- 填写:
- Title:随便起名,如
My-Laptop(标识哪台电脑) - Key type:保持默认 Authentication Key
- Key:粘贴步骤 4 复制的公钥
- Title:随便起名,如
- 点击 Add SSH key,GitHub 可能要求确认密码
步骤 6:测试 SSH 连接
|
|
命令拆解:
ssh:SSH 客户端-T:不分配终端(只测试认证)git@github.com:以 git 用户身份连接 GitHub
第一次连接会提示 Are you sure you want to continue connecting?,输入 yes 回车。
成功标志:
|
|
三、配置完成后如何使用
克隆仓库
|
|
已有仓库从 HTTPS 切换到 SSH
|
|
四、常见问题
Q1:一个密钥可以访问多个仓库吗?
可以。 SSH 密钥绑定的是整个 GitHub 账户,不是单个仓库。添加公钥后,该账户下所有仓库都可以通过 SSH 访问。
Q2:多台电脑怎么办?
每台电脑各自生成一对密钥,将各自的公钥都添加到 GitHub 即可(GitHub 支持添加多个 SSH key)。
Q3:SSH 和 GPG 有什么区别?
| 维度 | SSH 密钥 | GPG 密钥 |
|---|---|---|
| 用途 | 身份认证(push/pull/clone) | 给 commit 签名 |
| 效果 | 替代 HTTPS 密码 | commit 旁显示绿色 “Verified” 标签 |
| 是否必须 | 用 SSH 协议时必须 | 完全可选 |
Q4:ssh-agent 每次打开 Git Bash 都要重新启动吗?
是的。eval "$(ssh-agent -s)" 只在当前 shell 会话生效。关闭 Git Bash 后 agent 就停止了。如果不希望每次手动执行,可以在 ~/.bashrc 或 ~/.bash_profile 中添加自动启动的配置。
Q5:passphrase 忘了怎么办?
无法找回。只能重新生成密钥,然后更新 GitHub 上的公钥。
Q6:SourceTree 提示 SSH 密钥认证失败?
原因: SourceTree 默认使用 PuTTY/Plink 作为 SSH 客户端,而我们生成的密钥是 OpenSSH 格式,两者不兼容。
解决方法: 切换 SourceTree 的 SSH 客户端为 OpenSSH,无需重新生成密钥。
操作步骤:
- 打开 SourceTree → 菜单栏 工具 → 选项
- 选择 一般 选项卡
- 找到 SSH 客户端配置 区域
- 将 SSH 客户端从
PuTTY/Plink改为OpenSSH - 点击 确定
💡 补充说明:
- PuTTY/Plink:使用
.ppk格式的密钥(PuTTY 专用格式),密钥由 PuTTYgen 生成,由 Pageant 管理- OpenSSH:使用
id_ed25519格式的密钥(标准 SSH 格式),密钥由ssh-keygen生成,由ssh-agent管理- 我们在步骤 2 中用
ssh-keygen生成的是 OpenSSH 格式密钥,所以 SourceTree 也需要切换为 OpenSSH 客户端
五、命令速查表
|
|