Linux 开发者 SSH 密钥配置避坑实战指南
副标题:别再让
Permission denied (publickey)毁掉你的深夜加班!手把手教你一次搞定 SSH,从此git push如丝般顺滑。
📚 目录
-
第 1 章:你的 SSH 密钥藏哪儿了?——快速定位密钥文件
👉 看完本章,你能解决:明明配过密钥却找不到、误删.pub文件、多账号混乱等问题。 -
第 2 章:生成一把“金钥匙”——安全又高效的密钥创建法
👉 看完本章,你能解决:用老旧 RSA 被警告、密钥强度不足、忘记设置邮箱导致 GitHub 不认你等问题。 -
第 3 章:GitHub 不认你?可能是“钥匙没插对锁孔”
👉 看完本章,你能解决:公钥粘贴错误、换行符丢失、标题乱写导致认证失败等“低级但高频”问题。 -
第 4 章:多账号共存?SSH Config 来救场!
👉 看完本章,你能解决:公司 Git + 个人 GitHub 冲突、提交记录混用邮箱、频繁切换身份的烦恼。 -
第 5 章:实战 Demo —— 10 分钟搭建双 GitHub 账号开发环境
👉 看完本章,你能实现:一个终端同时管理work@company.com和me@gmail.com两个账号,互不干扰!
第 1 章:你的 SSH 密钥藏哪儿了?——快速定位密钥文件
“天下难事,必作于易;天下大事,必作于细。” ——《道德经》
SSH 密钥虽小,却是连接你与代码世界的唯一信物。找不对地方,再强的算法也白搭。
很多开发者一遇到 git@github.com: Permission denied (publickey) 就慌了神,其实90% 的问题出在“根本没找到正确的密钥”。
SSH 密钥默认存在用户家目录下的 .ssh 文件夹中。但你可能:
- 用过不同电脑,密钥名五花八门(
id_rsa,github_key,my_laptop_ed25519…) - 重装系统后以为“自动生成了”,其实没有
- 把私钥删了只留公钥,结果无法认证
✅ 正确做法:列出所有潜在密钥
ls -al ~/.ssh
你会看到类似:
-rw------- 1 user user 411 Jun 10 10:00 id_ed25519
-rw-r--r-- 1 user user 98 Jun 10 10:00 id_ed25519.pub
-rw------- 1 user user 1823 Jun 10 09:30 github_work
-rw-r--r-- 1 user user 411 Jun 10 09:30 github_work.pub
🔑 记住:
- 私钥(无
.pub)必须存在且权限为600- 公钥(带
.pub)才是你要贴到 GitHub 的内容
💡 小技巧:检查当前 ssh-agent 加载了哪些密钥
ssh-add -l
如果为空,说明你还没把私钥“插入”认证代理——下一章会教你怎么加。
第 2 章:生成一把“金钥匙”——安全又高效的密钥创建法
“工欲善其事,必先利其器。” ——《论语》
一把好钥匙,不仅要打得开锁,还要防得住撬。Ed25519 就是那把“现代金钥匙”。
别再用 ssh-keygen -t rsa 了!RSA 虽然通用,但Ed25519 更快、更短、更安全,且被 GitHub 官方推荐。
✅ 推荐命令(带邮箱,避免后续麻烦)
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519
-t ed25519:使用 Ed25519 算法(比 RSA 快 10 倍以上)-C "...":注释里带上邮箱,GitHub 会用它识别你-f:指定文件名,避免覆盖已有密钥
⚠️ 如果系统报错
unknown key type ed25519,说明 OpenSSH 版本太老(<6.5),改用:ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
🔐 设置 passphrase(可选但推荐)
生成时会让你输入 passphrase。虽然每次用要输密码,但能防止私钥被盗后直接滥用。配合 ssh-agent,一天只需输一次。
第 3 章:GitHub 不认你?可能是“钥匙没插对锁孔”
“差之毫厘,谬以千里。” ——《礼记·经解》
公钥少一个字符,或多了个空格,GitHub 就会把你拒之门外。
很多人复制公钥时犯了致命错误:
- 用鼠标拖选,漏掉开头的
ssh-ed25519 - 复制时自动换行,粘贴后变成两行
- 在 Windows 上用记事本打开,编码乱了
✅ 正确复制方式(Linux/macOS)
# 直接输出到终端,全选复制(确保是一整行!)
cat ~/.ssh/id_ed25519.pub
输出应类似:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG... your_email@example.com
🛠️ GitHub 添加步骤(关键细节!)
- 登录 GitHub → Settings → SSH and GPG keys
- 点 New SSH key
- Title:填设备名,如
My Ubuntu Laptop - Key type:选
Authentication Key - Key:粘贴整行内容(包括
ssh-ed25519和邮箱) - 点 Add SSH key
❌ 错误示例:
- 只粘贴中间那一长串(漏了算法和邮箱)
- 手动换行(GitHub 会认为这是无效格式)
✅ 测试是否成功
ssh -T git@github.com
看到 Hi <username>! You've successfully authenticated... 就成了!
第 4 章:多账号共存?SSH Config 来救场!
“一人分饰两角,全靠幕后调度。” ——《戏梦人生》
工作用公司邮箱,业余搞开源用个人账号?SSH Config 就是你的“身份调度员”。
如果你同时有:
- 公司 GitLab(
work@company.com) - 个人 GitHub(
me@gmail.com)
默认 SSH 会用 ~/.ssh/id_ed25519,导致提交记录混用邮箱,甚至被公司审计抓包!
✅ 解决方案:创建专属密钥 + 配置别名
# 生成工作密钥
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_work
# 生成个人密钥(如果还没有)
ssh-keygen -t ed25519 -C "me@gmail.com" -f ~/.ssh/id_personal
然后编辑 ~/.ssh/config(没有就新建):
# 默认个人账号
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_personal
# 工作账号(用别名)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work
🎯 使用方式
- 克隆个人项目:
git clone git@github.com:yourname/project.git - 克隆工作项目:
git clone git@github-work:company/project.git # 注意是 github-work!
这样,Git 会自动用对应密钥,提交邮箱也不会乱!
第 5 章:实战 Demo —— 10 分钟搭建双 GitHub 账号开发环境
“纸上得来终觉浅,绝知此事要躬行。” —— 陆游
现在,让我们把前面所有知识串起来,打造一个清爽、高效、无冲突的双账号开发环境!
🎯 目标
- 个人项目用
me@gmail.com提交 - 工作项目用
work@company.com提交 - 两个账号互不干扰,
git push一次成功
步骤 1:生成两对密钥
# 个人密钥
ssh-keygen -t ed25519 -C "me@gmail.com" -f ~/.ssh/id_personal
# 工作密钥
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_work
回车跳过 passphrase(或按需设置)
步骤 2:添加到 ssh-agent
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_personal
ssh-add ~/.ssh/id_work
验证:
ssh-add -l # 应看到两个密钥
步骤 3:配置 ~/.ssh/config
cat > ~/.ssh/config <<EOF
# Personal GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_personal
# Work GitHub (via alias)
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work
EOF
步骤 4:将公钥添加到 GitHub
# 复制个人公钥
cat ~/.ssh/id_personal.pub
# → 粘贴到 GitHub Settings → SSH Keys,Title 填 "Personal Laptop"
# 复制工作公钥
cat ~/.ssh/id_work.pub
# → 粘贴到 GitHub(或公司 GitLab),Title 填 "Work Laptop"
步骤 5:测试 & 使用
# 测试个人账号
ssh -T git@github.com
# 测试工作账号
ssh -T git@github-work
# 克隆项目
git clone git@github.com:me/awesome-project.git # 个人
git clone git@github-work:company/internal-tool.git # 工作
# 进入项目后,设置本地用户(避免全局污染)
cd awesome-project
git config user.email "me@gmail.com"
git config user.name "My Name"
cd internal-tool
git config user.email "work@company.com"
git config user.name "Work Name"
✅ 大功告成!从此:
git push不再卡在认证- 提交记录干净清晰
- 深夜加班不再因“Permission denied”砸键盘!
🎉 结语
SSH 密钥看似简单,却是开发者每日必经的“第一道门”。
配得好,一日千里;配不好,寸步难行。
希望这篇“避坑实战指南”能帮你彻底告别 Permission denied 的噩梦。
转发给那个还在手动输密码的同事吧——他欠你一杯咖啡 ☕。
作者:一位曾因 SSH 问题通宵的 Linux 老兵
首发于 CSDN,转载请注明出处
✅ 互动彩蛋:
你在 SSH 配置中踩过什么奇葩坑?评论区聊聊,点赞最高的送《Git 高效开发秘籍》电子书一份!
更多推荐
所有评论(0)