还在用 HTTPS 拉取代码?每次都要输密码?是时候切换到更安全、更高效的 SSH 连接了!
为什么选择 SSH 而非 HTTPS?
在开始配置之前,先了解为什么推荐使用 SSH:
- 无需频繁输入凭证:一次配置,永久使用
- 更安全:使用非对称加密,比密码更安全
- 适合自动化:CI/CD、脚本执行更方便
- 速度更快:无需 HTTP 协议开销
第一步:检查当前远程连接方式
首先,查看你的仓库当前使用的远程连接方式:
bash
# 查看当前远程仓库配置
git remote -v
# 如果显示的是 HTTPS URL(如下)
# origin https://gitlab.com/username/repository.git (fetch)
# origin https://gitlab.com/username/repository.git (push)
第二步:从 HTTPS 切换到 SSH
如果当前是 HTTPS 连接,需要切换到 SSH:
bash
# 将远程 URL 从 HTTPS 改为 SSH
git remote set-url origin git@gitlab.com:username/repository.git
# 再次验证是否修改成功
git remote -v
# 现在应该显示 SSH URL:
# origin git@gitlab.com:username/repository.git (fetch)
# origin git@gitlab.com:username/repository.git (push)
第三步:生成 SSH 密钥
如果你还没有 SSH 密钥,或者想创建新的密钥:
选项 A:使用 Ed25519 算法(推荐)
Ed25519 是一种基于椭圆曲线密码学的签名算法。椭圆曲线密码学在相同的安全强度下,所需的密钥长度比传统的 RSA 短很多
更短、更快、更简洁
bash
# 生成 Ed25519 密钥(更安全、更快)
ssh-keygen -t ed25519 -C "your_email@example.com"
选项 B:使用 RSA 算法(兼容性更好)
bash
# 生成 RSA 4096 位密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
密钥生成过程详解
执行上述命令后,你会看到:
-
保存路径:直接按回车使用默认路径 (
~/.ssh/id_ed25519或~/.ssh/id_rsa) -
密码设置:
- 设置密码:更安全,但每次使用需要输入密码
- 不设密码:更方便,适合自动化场景
- 推荐:设置一个强密码,然后配置 SSH 代理记住密码
第四步:管理 SSH 代理
SSH 代理可以帮助你管理密钥,避免重复输入密码:
bash
# 启动 SSH 代理
eval "$(ssh-agent -s)"
# 应该看到类似:Agent pid 12345
# 添加你的私钥到 SSH 代理
# 如果是 Ed25519 密钥:
ssh-add ~/.ssh/id_ed25519
# 如果是 RSA 密钥:
ssh-add ~/.ssh/id_rsa
# 查看已添加的密钥
ssh-add -l
让 SSH 代理自动启动(Windows Git Bash)
在 ~/.bashrc 或 ~/.bash_profile 中添加:
bash
# 自动启动 ssh-agent
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519 # 或你的密钥路径
fi
第五步:获取并复制公钥
bash
# 查看公钥内容
cat ~/.ssh/id_ed25519.pub
# 或使用以下命令复制到剪贴板:
# Git Bash(Windows)
cat ~/.ssh/id_ed25519.pub | clip
# macOS
pbcopy < ~/.ssh/id_ed25519.pub
# Linux(需要安装 xclip)
xclip -sel clip < ~/.ssh/id_ed25519.pub
第六步:在 GitLab 中添加 SSH 密钥
-
登录 GitLab:访问 GitLab
-
进入设置:
- 点击右上角头像 → Preferences(或 Settings)
- 左侧菜单选择 SSH Keys
-
添加密钥:
- 在 Key 文本框中粘贴公钥
- 在 Title 中输入有意义的名称(如:"MacBook Pro - Work")
- (可选)设置过期时间
- 点击 Add key
第七步:测试 SSH 连接
bash
# 测试 SSH 连接到 GitLab
ssh -T git@gitlab.com
# 如果一切正常,你会看到:
# Welcome to GitLab, @your_username!
如果连接失败,常见问题排查:
bash
# 1. 检查 SSH 配置
cat ~/.ssh/config
# 2. 如果是公司 GitLab,可能需要特定配置
# 在 ~/.ssh/config 中添加:
Host gitlab.company.com
HostName gitlab.company.com
User git
IdentityFile ~/.ssh/id_ed25519
PreferredAuthentications publickey
# 3. 检查防火墙和网络
ssh -vT git@gitlab.com # 详细模式查看连接过程
第八步:使用 SSH 克隆仓库
现在你可以使用 SSH 方式克隆仓库了:
bash
# 使用 SSH URL 克隆
git clone git@gitlab.com:username/repository.git
# 而不是 HTTPS URL:
# git clone https://gitlab.com/username/repository.git
高级技巧与最佳实践
1. 为不同账户使用不同密钥
bash
# 生成第二个密钥
ssh-keygen -t ed25519 -C "personal_email@example.com" -f ~/.ssh/id_ed25519_personal
# 配置 ~/.ssh/config
Host gitlab.com-work
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Host gitlab.com-personal
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# 使用不同的主机别名克隆
git clone git@gitlab.com-work:company/project.git
git clone git@gitlab.com-personal:personal/project.git
2. 检查现有密钥
bash
# 查看所有 SSH 密钥
ls -la ~/.ssh/
# 检查密钥指纹
ssh-keygen -lf ~/.ssh/id_ed25519.pub
3. 更新已存在的仓库
bash
# 如果你已经用 HTTPS 克隆了仓库,想切换到 SSH
cd existing-repository
git remote set-url origin git@gitlab.com:username/repository.git
git remote -v # 验证
4. 安全注意事项
- 🔐 定期轮换密钥:每 6-12 个月更新一次
- 🗑️ 删除不再使用的密钥:在 GitLab 设置中及时清理
- 📝 记录密钥用途:为每个密钥添加有意义的注释
- 🔍 监控使用情况:定期检查 GitLab 的 SSH 密钥访问日志
常见问题解答
Q:为什么 SSH 连接失败?
A:检查 .ssh 目录权限(应该是 700),密钥文件权限(应该是 600),以及 GitLab 上的公钥是否正确。
Q:可以同时使用多个 SSH 密钥吗?
A:可以!通过 ~/.ssh/config 文件配置不同主机使用不同密钥。
Q:Windows 上有什么特别要注意的?
A:确保使用 Git Bash 或 WSL,而不是 CMD。检查 Windows 防火墙设置。
Q:如何验证密钥是否生效?
A:运行 ssh -T git@gitlab.com,看到欢迎消息即表示成功。
总结
切换到 SSH 连接不仅能提升你的 Git 使用体验,还能增强安全性。虽然初始设置需要一些步骤,但一次配置后,你将享受无缝的代码推送和拉取体验。
记住这个简单的转换流程:
- 检查当前连接方式
- 生成SSH 密钥
- 添加密钥到 SSH 代理
- 上传公钥到 GitLab
- 测试连接
- 享受无密码的 Git 操作
现在就去配置吧,告别繁琐的密码输入,拥抱高效的开发工作流!
小提示:如果你在团队中工作,建议将这篇指南分享给团队成员,统一使用 SSH 可以提高整个团队的工作效率。