ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Mac上配置GitHub SSH Keys完整指南,解决Permission denied与多账号管理

Mac上配置GitHub SSH Keys完整指南,解决Permission denied与多账号管理 很多人在 Mac 上折腾 GitHub 的第一道坎不是代码写不出来而是git push的时候被拒或者每次操作都要输一遍用户名密码。更难受的是有时候明明照着网上的教程敲了一堆命令最后ssh -T gitgithub.com还是报Permission denied (publickey)。这篇文章我就把 Mac 下给 GitHub 配置 SSH keys 的完整链路拆开讲一遍包括密钥生成、agent 配置、GitHub 端添加、多账号隔离、以及我这些年实际踩过的坑。适合刚接触 Git 的小白也适合被密钥折腾过但没搞明白原理的老手。1. 为什么要用 SSH keys 而不是密码先说个最基本的问题。GitHub 支持两种主流远程认证方式HTTPS 和 SSH。很多人刚开始用 GitHub 时clone仓库都是直接复制 HTTPS 链接用起来确实没啥毛病但推到一定程度就会发现几个痛点。HTTPS 方式下如果你没有配置 credential helper每次git push都要手动输入 GitHub 的用户名和个人访问令牌Personal Access Token。从 2021 年 8 月 13 日起GitHub 已经彻底不再接受账户密码作为 Git 操作认证所以就算你输密码也没用必须用 token。token 那串字符又长又难记每次敲都恨不得摔键盘。SSH keys 的原理是公钥加密。你在本地生成一对密钥——私钥和公钥私钥留在自己电脑上公钥上传到 GitHub。之后git push时GitHub 会用你上传的公钥加密一个随机挑战发给你的客户端客户端用私钥解密后返回给服务器服务器确认身份后就放行。这个过程完全不需要你手动输入任何凭证而且私钥本身不出本地比在命令行里频繁粘贴 token 要安全得多。还有个实际体验上的差别。走 HTTPS 协议时如果网络环境不稳定或者公司网络对 443 端口做了限速push大仓库时经常超时或断流。而 SSH 默认走 22 端口在某些网络环境下连通性和稳定性反而更好。当然如果 22 端口被封SSH 也可以切换到 443 端口走 HTTPS 通道这个后面我单独说。从管理角度看SSH key 也更好区分权限。你可以为不同设备生成不同的 key分别在 GitHub 后台命名比如macbook-pro-work、ubuntu-server。哪天某台机器丢了或者不用了直接在后台删掉对应的公钥即可不影响其他设备。2. 检查本机现状与密钥生成2.1 先看看有没有现成的密钥别一上来就ssh-keygen先检查一下电脑上是不是已经有密钥了避免生成一堆无用的 key 把~/.ssh目录搞乱。打开终端执行ls -la ~/.ssh如果输出里能看到id_ed25519和id_ed25519.pub这样的一对文件说明你已经有了密钥。如果同时存在id_rsa和id_rsa.pub那就是老的 RSA 密钥。这时候可以选择直接复用旧密钥也可以重新生成一把新密钥专门给 GitHub 用。我个人的建议是如果旧密钥你不知道密码passphrase或者来源不明比如是公司统一派发或者同事帮忙生成的最好重新生成一把干净的密钥。密钥这东西和钥匙一样经手的人越少越好。如果~/.ssh目录不存在说明你之前没用过 SSH 密钥直接进入下一步。2.2 用 ed25519 算法生成新密钥现在 SSH 密钥算法有好几种常见的有 RSA、ECDSA、Ed25519。GitHub 官方推荐的算法就是 Ed25519它的优势是密钥长度短、生成速度快、安全性也高于 2048 位的 RSA而且现代 OpenSSH 版本都原生支持不需要额外配置。我见过有些教程还在用ssh-keygen -t rsa -b 4096 -C your_emailexample.com这个写法在 2024 年依然能用但换个思路想Ed25519 是更合理的选择。除非你需要连接一台非常老旧的服务器上面跑的 OpenSSH 版本低于 6.5否则没有必要再用 RSA。生成命令ssh-keygen -t ed25519 -C your_emailexample.com这里的-C参数是注释标识一般填你的 GitHub 注册邮箱但它并不会校验邮箱是否真实只是一个方便你识别的标签而已。你也可以填自己的名字或者机器名完全取决于个人习惯。执行后终端会提示Generating public/private ed25519 key pair. Enter file in which to save the key (/Users/yourname/.ssh/id_ed25519):直接回车确认使用默认路径即可。接着会提示Enter passphrase (empty for no passphrase): Enter same passphrase again:这里要注意一下。passphrase 相当于私钥的使用密码就算别人拿到了你的私钥文件没有 passphrase 也解不开。但代价是每次使用私钥都要输入一次 passphrase除非你配置了 ssh-agent 帮你记住。我的建议是个人电脑上使用可以设置一个 passphrase然后搭配 ssh-agent 在会话期间缓存兼顾安全和体验。如果嫌麻烦也可以留空但前提是你电脑本身有全盘加密FileVault并且日常使用环境相对可信。说实话我自己工作机器上是设置的家里那台跑测试的 Mac mini 就没设因为里面没有任何生产环境凭据。2.3 查看公钥内容生成完之后用下面命令查看公钥cat ~/.ssh/id_ed25519.pub输出格式一般是ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxQxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_emailexample.com完整的ssh-ed25519开头的一整行就是你要用到的公钥。公钥是可以公开的不需要保密。把这一整行复制下来下一步去 GitHub 后台添加。3. 把公钥添加到 GitHub 账号3.1 通过网页后台添加登录 GitHub点击右上角头像选择Settings。然后在左侧菜单里找到SSH and GPG keys点击New SSH key按钮。这时候会看到两个表单字段Title给你的密钥起个名字比如MacBook Pro 2024。方便以后在多台设备之间区分。Key type保持默认的Authentication Key即可。另一个Signing Key是用于 Git 提交签名验证的跟 SSH 认证不是一回事千万别选混了。Key把刚才复制的公钥整行粘贴进去。确认无误后点击Add SSH key。如果账号开启了双重认证这个时候会要求输入密码或验证码确认操作。GitHub 可能还会弹窗提示你确认密码这是正常的安全机制。3.2 用 gh 命令行工具添加如果你安装了 GitHub 官方的gh命令行工具也可以用命令行完成同样操作gh ssh-key add ~/.ssh/id_ed25519.pub --title MacBook Pro 2024执行后它会自动推送公钥到 GitHub。我用过几次体验很顺畅。但前提是你已经通过gh auth login完成了认证。这个方式对纯命令行用户比较友好不需要打开浏览器。3.3 验证连通性公钥添加完成后先在本地测试一下能不能连通 GitHubssh -T gitgithub.com第一次连接时终端会提示确认 GitHub 的主机指纹fingerprintThe authenticity of host github.com (20.205.243.166) cant be established. ED25519 key fingerprint is SHA256:DiY3wvvV6TuJJhbpZisF/zLDA0zPmsXkTGjZ/zZ7h8. Are you sure you want to continue connecting (yes/no)?如果显示的指纹和 GitHub 官方文档公布的一致输入yes回车即可。GitHub 官方文档里长期维持一份指纹列表建议核对一下再确认。连接成功后你会看到Hi yourusername! Youve successfully authenticated, but GitHub does not provide shell access.这句话虽然看起来像报错但实际上它恰恰说明认证已经成功了。很多新手看到but GitHub does not provide shell access就以为自己配错了其实不是。GitHub 不给你 shell 权限是设计如此它只接受 Git 操作不接受远程登录。3.4 切换现有仓库的远程地址如果之前是用 HTTPS 方式 clone 的仓库现在想切换到 SSH可以执行git remote set-url origin gitgithub.com:username/repo.git查看当前远程地址用git remote -v改完之后再git push试试理论上不再需要输入凭证。这里有个小细节改 remote URL 只影响当前仓库如果你有多个仓库都要切得逐个执行。4. ssh-agent 的作用与 passphrase 缓存4.1 ssh-agent 解决了什么问题给私钥设置了 passphrase 之后如果你不做额外配置每次git push或者git pull都会提示输入 passphrase体验不输给输 token。ssh-agent 就是用来解决这个痛点的。ssh-agent 是一个运行在后台的守护进程它把你的私钥加载进内存并代为响应 SSH 认证握手。你在会话中第一次解锁私钥后后续的 SSH 连接都不会再询问 passphrase直到 ssh-agent 被重启或者密钥被移除。Mac 上启动 ssh-agent 的标准姿势eval $(ssh-agent -s)输出会是一个Agent pid 12345之类的信息说明 agent 已经在跑了。4.2 把密钥加入钥匙串把私钥加入 agent并在 macOS 上启用 Keychain 集成ssh-add --apple-use-keychain ~/.ssh/id_ed25519这个命令在 macOS 上会把 passphrase 保存到系统的钥匙串Keychain里。这样不仅当前会话可用重启电脑之后也能自动解锁。前提是你要在系统设置里允许终端访问钥匙串。如果你是较早版本的 macOS或者习惯用通用参数也可以写ssh-add -K ~/.ssh/id_ed25519-K是--apple-use-keychain的老写法。在较新的 OpenSSH 版本里-K已经标记为废弃但依然可用。我建议直接用--apple-use-keychain毕竟新写法更明确也不会因为 OpenSSH 升级突然失效。如果私钥没有设置 passphrase直接ssh-add ~/.ssh/id_ed25519就行不会要求输入任何东西。4.3 配置 ~/.ssh/config 实现自动加载光有 ssh-agent 还不够因为每次重启电脑后 agent 默认是空的。你可以在~/.ssh/config里做如下配置让系统每次发起 SSH 连接时自动加载指定私钥Host github.com HostName github.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519各项含义Host这是你在命令行里用的别名github.com就是别名本身。HostName实际连接的服务器域名。UserSSH 登录用户名GitHub 固定是git不要改成你的 GitHub 用户名。AddKeysToAgent yes每次连接时自动把私钥加入 agent。UseKeychain yesmacOS 专用把 passphrase 存储到钥匙串。IdentityFile指定使用哪个私钥文件。设置好之后你几乎感觉不到 passphrase 的存在。即便重启电脑第一次连接也不会再询问系统直接从钥匙串取出 passphrase 解锁私钥。需要说明的是如果你用的 OpenSSH 版本较新macOS 自带的通常没问题UseKeychain与AddKeysToAgent组合使用效果稳定。如果遇到奇怪的问题可以试试去掉UseKeychain只保留AddKeysToAgent然后通过ssh-add手动加载一次。5. 常见的 Permission Denied 问题排查路径5.1 最经典的排查链路Permission denied (publickey)是大家遇到最多的错误。每次在 GitHub 相关帖子下面看到这个报错都有一堆人在那瞎猜。我根据自己折腾的经验整理了一条高效的排查路径按顺序执行基本能定位问题。第一步用ssh -vT gitgithub.com开启详细日志ssh -vT gitgithub.com注意是-vT-v输出调试信息-T表示不申请终端。如果还嫌不够细可以用-vvv能显示出更多握手细节但日常排查-v足够。看日志里有没有类似这样一行debug1: Offering public key: /Users/yourname/.ssh/id_ed25519 ED25519 SHA256:xxx debug1: Authentications that can continue: publickey如果Offering public key后面跟着Authentications that can continue说明你的公钥发过去了但服务器不认。这时候去 GitHub 后台看看公钥是不是粘贴漏了字符或者公钥确实不是这把。如果日志里根本没有任何私钥被尝试说明~/.ssh/config里IdentityFile指定的密钥路径不对或者这个 Host 块被另一段配置覆盖了。检查一下config文件里针对github.com的配置有没有写错主机名。第二步确认当前 agent 里加载了哪些密钥ssh-add -l如果输出The agent has no identities.说明 agent 是空的私钥没有被加载。这时候手动执行ssh-add ~/.ssh/id_ed25519再次测试连接。第三步确认 GitHub 用户名写对了。SSH 方式连接时User git是固定的但很多人会在 GitHub 后台复制仓库地址时不小心把git写成自己的用户名导致连接失败。5.2 多密钥场景下的 IdentityFile 冲突如果你电脑上有多把 SSH 密钥比如公司 GitLab 一把、个人 GitHub 一把那么在~/.ssh/config里就必须写清楚不同域名用哪个密钥。否则会出现一种常见情况SSH 默认按文件名顺序尝试密钥如果第一把密钥 GitHub 不认而 agent 里又没有其他合适的密钥就会直接放弃不会自动尝试第二个。一个合理的多账号配置示例Host github.com HostName github.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519_github Host gitlab.company.com HostName gitlab.company.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519_company生成密钥时给 GitHub 单独起一个文件名ssh-keygen -t ed25519 -C your_emailexample.com -f ~/.ssh/id_ed25519_github-f参数指定输出文件名。我强烈建议多密钥场景下始终用自定义文件名别一把id_ed25519走天下后面根本分不清哪把对应哪个平台。5.3 SSH key 已经添加但仍失败的特殊情况有一种比较隐蔽的情况公钥确实添加了私钥路径也正确但 GitHub 依然报Permission denied。原因可能是你改了 GitHub 账号的邮箱或者公钥注释里面的邮箱和账号不匹配。虽然-C注释不做认证校验但有些工具链会拿注释里的邮箱去匹配账号匹配不上就出问题。解决办法重新生成一把密钥-C里换成 GitHub 当前账号绑定的邮箱然后替换掉后台公钥和本地私钥。另一种情况是系统时间和实际时间偏差过大。SSH 协议在认证过程中会用到时间戳偏差太大的话服务器的 challenge 验证会失败。macOS 上如果长期不联网时间漂移有可能发生。检查系统时间是否准确必要时开启自动设置时间。6. 多账号管理与 GitHub Deploy Keys6.1 同一台机器管理多个 GitHub 账号有人在同一台 Mac 上同时维护个人 GitHub 和公司 GitHub。除了前面说的配置多个Host块更安全的方式是使用单独的 SSH 配置文件为不同账号指定不同的密钥文件。因为 Git 在推送时根据 remote URL 里的 Host 名来匹配 SSH config不同 Host 可以用不同的密钥。比如你有一个私有仓库remote 地址是gitgithub.com:company/private-repo.git它会命中Host github.com的配置使用对应的个人密钥。而另一个仓库如果走gitgithub-work:company/private-repo.git其中github-work是你在 config 里自定义的别名SSH 连接时会读取Host github-work段的配置使用公司密钥。这中间的关键是 URL 里的别名必须与 config 里的Host完全一致。配置示例Host github-work HostName github.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519_company Host github.com HostName github.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519_github添加 remote 时用别名地址git remote add origin gitgithub-work:company/private-repo.git这样同一个物理机、同一个 GitHub 域名但不同仓库走不同密钥。我第一次配这个的时候吃了不小的亏因为 remote URL 写的是标准的gitgithub.com导致所有仓库都走了个人密钥公司仓库怎么都推不上去。6.2 Deploy Keys 的使用场景如果你只是想在一台服务器或者 CI 机器上拉取某个特定仓库不想给它整个 GitHub 账号的访问权限可以用 Deploy Keys。在仓库页面进入Settings - Deploy keys - Add deploy key粘贴公钥。如果勾选Allow write access这把 key 还能推送不勾选则只读。Deploy Keys 是作用在单个仓库上的能有效控制某台机器能访问哪些仓库。注意同一台机器上的同一个 SSH key 不能同时作为个人认证 key 和一个仓库的 Deploy key 使用GitHub 后端会限制重复使用。如果你需要在服务器上既访问个人仓库又访问项目仓库最好生成两把不同的 key。7. SSH 连接 22 端口被墙的替代方案有一种网络环境很烦人22 端口被运营商或者公司防火墙拦截导致gitgithub.com连接超时。但 HTTPS 的 443 端口通常是放行的因为浏览器要上网。GitHub 提供了 SSH over HTTPS 的替代方案。修改~/.ssh/configHost github.com HostName ssh.github.com Port 443 User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519然后同样测试ssh -T gitgithub.com如果网络没问题会看到和之前一样的成功提示。这个方案我印象很深有次在酒店网络下推送代码22 端口死活连不上改到 443 秒好。GitHub 官方文档也保留了这种配置方法。需要注意HostName ssh.github.com不能写成github.com否则端口改了但域名不对依然连不上。8. 密钥更新、吊销和平常维护8.1 换电脑或者重装系统Mac 换新机后如果不迁移~/.ssh目录新机器上是没有私钥的。这时候有两个选择从旧机器拷贝整个~/.ssh目录或者在新机器上生成新密钥并重新添加公钥到 GitHub。从旧机器拷贝的方法适合无缝迁移scp -r old-mac:~/.ssh ~/.ssh但拷贝完要确认私钥文件的权限是 600chmod 600 ~/.ssh/id_ed25519 chmod 700 ~/.sshOpenSSH 对私钥文件权限有严格校验权限过于宽松会直接忽略该密钥这也是一种安全机制。以前我遇到过Permissions 0644 for id_rsa are too open的报错原因就是把整个用户目录拿来拷去文件权限被搞乱了。如果在旧机器上不方便拷贝那就在新机器上生成新密钥然后去 GitHub 后台把旧公钥删掉添加新公钥。不需要动任何仓库 remote 地址因为用户名和主机名都没变换个公钥而已。8.2 丢失密钥或怀疑密钥泄露如果你的私钥泄露了或者丢了一台已经配置过密钥的设备第一时间登录 GitHub进入Settings - SSH and GPG keys找到对应的 key直接Delete。删除公钥后旧设备上的私钥就成了一堆废数据不能再通过认证。但这里有一个延伸问题Git 提交历史里如果用了这个 SSH key 去推送历史中不会有密钥信息所以删除 key 不影响已有仓库的代码。之后在正常设备上重新生成一把新密钥并添加。建议参照 GitHub 官方检查流程确认账号安全后重置一下相关凭据。8.3 定期检查哪些密钥还活跃很多人的 GitHub 账号上挂着一堆陈年公钥有的是大学实验课配的有的是前公司的电脑。建议每隔几个月去后台过一遍把不认识的、不用的删除。公钥多了不一定是好事等于你的账号向多把半丢失的钥匙敞开。本地也可以定期看下装了哪些密钥ssh-add -l ls -la ~/.ssh看到不认识的密钥文件先确认日期再决定是否删除。9. 一些省心的操作细节9.1 第一次 clone 时直接把 remote 换成 SSH如果你还没 clone 仓库直接在 GitHub 仓库页面点击Code按钮切换到SSH标签复制gitgithub.com:user/repo.git格式的地址。这样从一开始就走 SSH省得后面再去改 remote。9.2 给不同设备起容易识别的 Title有用的技巧是新建密钥时把 Title 写成macbook-2024、imac-27、vps-hk而不是Mac、PC这种过于宽泛的名字。你永远无法预知半年后你会不会怀念那个能分清楚哪台电脑在几月添加了密钥的时刻。9.3 遇到问题先分离变量连接 GitHub 报错的时候先不要急着去改配置。建议按这四步走查 agent 状态ssh-add -l、查密钥文件权限ls -l ~/.ssh/、查 config 内容、最后才动 GitHub 后台。很多人一上来就重装 Git、重装系统实在没必要。SSH 配置问题绝大多数是路径、权限、config 三个因素之一。刻意把问题范围缩小排查会轻松很多。9.4 关于 GitHub 的登录入口打不开这个不涉及 SSH 配置本身但如果你连 GitHub 后台都进不去那就没法添加公钥。可以检查一下电脑当前的网络环境或者换个时间再试。某些网络环境对 GitHub 的访问本身就不稳定换网络之后再试。有些公网镜像站虽然能勉强浏览网页但涉及密钥上传这类交互操作还是建议在直连环境下进行否则可能上传失败或页面异常。10. 从命令行到日常协作的衔接10.1 配置好 SSH 后别忘了确认 Git 用户信息SSH 配置完成只是打通了传输层认证但你的提交commit还需要关联正确的用户名和邮箱。很多人配完 SSH 后 push 成功但提交记录里作者信息却是错的。检查当前仓库的提交用户信息git config user.name git config user.email如果没有输出或者内容不对在项目目录里设置git config user.name your_username git config user.email your_emailexample.com注意GitHub 识别提交作者靠的是邮箱而不是用户名。你在本地配置的提交邮箱必须是你 GitHub 账号里验证过的邮箱之一否则提交虽然能 push 上去但不会关联到你的 GitHub 头像和贡献图上。如果你想全局生效可以加--globalgit config --global user.name your_username git config --global user.email your_emailexample.com从我自己的实践来看如果不小心用错了邮箱提交GitHub 上会显示成一个未关联的独立用户贡献图会有缺口处女座看了很难受。10.2 用 SSH config 给常用仓库统一别名如果你经常操作一组仓库可以更进一步在~/.ssh/config里为多台服务器或者多个远程端点做统一入口。比如公司内网 Git 服务器、测试服务器等都可以在Host里用短别名代替完整域名。这样每次git clone、scp都会省去一长串。但注意别和仓库名冲突如果别名过于通用可能引起混淆。10.3 生产环境里别裸奔如果 SSH 密钥用在一台持续集成CI服务器或者一台长期运行的云服务器上千万不要用无 passphrase 的密钥裸奔。云服务器一旦被入侵私钥文件就会被直接提走而 GitHub 后台会看到这把公钥还在正常使用中你就很难及时察觉异常。针对这种场景我见过两种更安全的做法使用 Deploy Keys 并设置只读权限把攻击面压到最小。把私钥用密钥管理服务托管比如 1Password、Bitwarden 这类工具CI 在构建时临时注入私钥构建完成后销毁。对个人 Mac 来说不一定需要这么重的方案但至少应该在意识上有区分开发机和长期运行的服务器对密钥的保护等级应该不一样。11. 关于权限问题的终极提醒很多人配置好 SSH 后过一阵子跑代码突然报Bad owner or permissions这也是权限问题。OpenSSH 对~/.ssh及其中文件的权限要求是~/.ssh目录权限不能超过 700私钥文件权限不能超过 600公钥文件权限可以宽松一些644 没问题~/.ssh/config文件权限不要超过 644最好也是 600如果你发现权限乱了直接修正chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub chmod 600 ~/.ssh/config修完之后再测试连接。这个问题在从 Windows 或 Linux 环境把整个.ssh目录复制到 Mac 时特别常见因为 Windows 上的权限模型和 Unix 完全不同复制过来的文件权限往往不符合 OpenSSH 的校验规则。12. 实际使用中的几个小技巧12.1 使用 GitHub CLI 快速验证如果你安装了gh除了上面说的添加密钥外也可以用来诊断认证状态gh auth status它会输出你当前以哪种方式认证、使用哪个账户、有没有 SSH key 参与认证。比自己去翻配置省事不少。12.2 通过 ssh 命令区分当前生效的配置当你修改了~/.ssh/config后可以用以下命令验证针对某个 Host 实际生效的参数ssh -G github.com | grep -E (hostname|user|identityfile|port)-G参数让 ssh 输出解析后的配置信息但不实际连接。这个命令很有用能快速检查HostName、User、Port、IdentityFile是否符合你的预期避免被某些配置覆盖坑到。比如我遇到过的情况是系统级/etc/ssh/ssh_config里有个全局的IdentityFile设置导致我总是用错误的密钥去连 GitHub。通过ssh -G一眼就看出来了。12.3 备份好你的私钥只要私钥没有 passphrase任何能读到这个文件的人都能冒充你向 GitHub 推送代码。所以备份私钥时务必加密压缩tar czf ssh-backup.tar.gz ~/.ssh然后把压缩包放到密码管理器或者加密磁盘里。千万不要把原始私钥文件直接塞到任何网盘或者在线笔记里。如果是带 passphrase 的密钥备份时理论上可以直接复制文件但为了稳妥我还是建议加密归档。我在实际处理中见过太多人把id_rsa、id_ed25519明文扔进 iCloud 或者各种云盘的这个习惯非常危险。一旦云盘账号被盗攻击者等于拿到了你家门钥匙。13. 一套能直接抄的完整配置最后放一套我在全新 Mac 上初始化 GitHub SSH 的完整流程。照着执行基本不会再踩坑。安装 Git一般 Mac 自带但建议点亮 Xcode Command Line Toolsxcode-select --install生成密钥ssh-keygen -t ed25519 -C your_emailexample.com -f ~/.ssh/id_ed25519_github设置 passphrase。启动 ssh-agent 并加入密钥eval $(ssh-agent -s) ssh-add --apple-use-keychain ~/.ssh/id_ed25519_github编辑~/.ssh/configHost github.com HostName github.com User git AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_ed25519_github复制公钥pbcopy ~/.ssh/id_ed25519_github.pub打开 GitHub 后台Settings - SSH and GPG keys - New SSH key粘贴公钥命名。测试ssh -T gitgithub.com看到Hi username! Youve successfully authenticated...就完成了。如果是已有仓库改 remote 地址git remote set-url origin gitgithub.com:username/repo.gitpbcopy是 macOS 自带的命令把文件内容直接复制到剪贴板。在终端粘贴时直接Cmd V就行不用鼠标去选中。这套流程里唯一一个可能需要根据实际情况调整的地方就是 SSH config 里的UseKeychain。如果你用的是公司统一签发的 Mac且系统禁用了钥匙串同步那就去掉这一行改用每次启动 agent 后手动ssh-add的方式。我在实际操作中体会比较深的一点是SSH 配置这件事90% 的问题都出在细节上——文件名写错、路径多了空格、权限太开放、config 里 Host 名没对应上。只要耐心把ssh -vT的日志看明白整个排查过程一点也不神秘。配好之后Git 推拉代码的体验会非常顺那种每次都要找 token 的日子真的可以翻篇了。
返回列表