什么是 SSH Key?

SSH(Secure Shell)密钥是一种加密的网络协议,用于在不安全的网络上安全地进行远程操作。SSH Key 由一对密钥组成:

  • 私钥 (Private Key):存储在本地计算机上,必须严格保密

  • 公钥 (Public Key):可公开分享,需要上传到 Git 服务商(GitHub、GitLab 等)

检查现有 SSH 密钥

在生成新密钥之前,先检查是否已存在 SSH 密钥:

bash

# 查看 ~/.ssh 目录下的现有密钥
ls -al ~/.ssh

常见的密钥文件包括:

  • id_rsaid_rsa.pub(RSA 算法)

  • id_ed25519id_ed25519.pub(EdDSA 算法)

生成新的 SSH 密钥

方法一:使用 RSA 算法(兼容性更好)

bash

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

方法二:使用 Ed25519 算法(更安全、更快速)

bash

ssh-keygen -t ed25519 -C "your_email@example.com"

执行命令后,系统会提示:

  1. 输入保存路径(直接回车使用默认位置)

  2. 设置密码短语(可选,为密钥添加额外保护)

将 SSH 密钥添加到 SSH 代理

启动 SSH 代理

bash

# 启动 ssh-agent
eval "$(ssh-agent -s)"

# 将 SSH 私钥添加到代理
ssh-add ~/.ssh/id_rsa

自动启动 SSH 代理(可选配置)

将以下内容添加到 ~/.bashrc~/.zshrc

bash

# 自动启动 ssh-agent 并添加密钥
if [ -z "$SSH_AUTH_SOCK" ]; then
   eval "$(ssh-agent -s)"
   ssh-add ~/.ssh/id_rsa 2>/dev/null
fi

将公钥添加到 Git 服务商

复制公钥内容

bash

# 显示并复制公钥内容
cat ~/.ssh/id_rsa.pub
# 或者使用复制命令(macOS)
pbcopy < ~/.ssh/id_rsa.pub

添加到 GitHub

  1. 登录 GitHub,点击右上角头像 → Settings

  2. 左侧菜单选择 SSH and GPG keys

  3. 点击 New SSH key

  4. 填写标题,粘贴公钥内容

  5. 点击 Add SSH key

测试 SSH 连接

验证配置是否成功:

bash

ssh -T git@github.com

成功时会显示:Hi username! You've successfully authenticated...


🚀 Push 测试实战

下面我们通过一个完整的实战流程来测试 SSH Key 是否配置成功。

步骤 1:创建测试仓库

bash

# 创建测试目录
mkdir ssh-key-test
cd ssh-key-test

# 初始化 Git 仓库
git init

# 创建测试文件
echo "# SSH Key 测试仓库" > README.md
echo "这是一个测试 SSH Key 免密登录的仓库" >> README.md

步骤 2:配置 Git 用户信息

bash

# 设置用户名和邮箱(如果尚未设置)
git config user.name "您的用户名"
git config user.email "您的邮箱@example.com"

步骤 3:提交代码

bash

# 添加文件到暂存区
git add .

# 提交更改
git commit -m "测试 SSH Key 免密登录"

步骤 4:添加远程仓库

首先在 GitHub 上创建一个新仓库,然后:

bash

# 添加远程仓库(替换为您的实际仓库地址)
git remote add origin git@github.com:您的用户名/您的仓库名.git

步骤 5:执行 Push 测试!

bash

# 推送到远程仓库
git push -u origin main

预期的成功结果:

如果 SSH Key 配置成功,您将看到:

text

✅ 没有弹出密码输入提示
✅ 直接开始上传文件
✅ 显示类似下面的成功信息:

Counting objects: 3, done.
Writing objects: 100% (3/3), 256 bytes | 256.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:您的用户名/您的仓库名.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

如果 Push 失败,排查步骤:

bash

# 1. 测试 SSH 连接
ssh -T git@github.com

# 2. 检查远程地址是否正确
git remote -v

# 3. 验证 SSH 密钥是否加载
ssh-add -l

# 4. 检查密钥权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

测试结果分析

✅ 成功迹象:

  • 无需输入用户名密码

  • 代码快速上传到远程仓库

  • 操作流程顺畅无中断

❌ 失败迹象:

  • 提示权限被拒绝(Permission denied)

  • 要求输入用户名密码

  • 连接超时或失败

总结

通过本次 push 测试,您可以验证 SSH Key 配置是否真正生效。成功的 push 操作证明:

  1. SSH 密钥生成

  2. 公钥上传到 Git 服务商

  3. SSH 代理配置

  4. 免密登录功能

恭喜!您现在可以享受顺畅的 Git 免密操作体验了! 🎉

安全提示:记得保护好您的私钥,不要分享给他人,定期更换密钥以保持安全。