如何通过SSH密钥让个人GitHub账号获得工作仓库读写权限?
首先得明确一个核心点:GitHub的权限是绑定在账号上的,SSH密钥只是用来验证你是某个账号的持有者,本身并不携带任何权限。你现在遇到的访问拒绝问题,本质是因为personal@gmail.com这个账号并没有被添加到目标仓库的成员列表中——哪怕你用的是原来work@gmail.com的密钥,现在这个密钥关联的是personal账号,GitHub会验证你是personal账号,然后检查这个账号的权限,自然会拒绝。
那能不能通过这个密钥获取权限?答案是可以,但需要先让personal账号获得仓库权限,具体操作分两步:
第一步:让personal账号获得仓库读写权限
联系目标仓库的管理员,请求将personal@gmail.com这个GitHub账号添加为仓库成员,并分配读写权限。只有当账号本身拥有权限后,对应的SSH密钥才能通过身份验证并获得访问权限。
第二步:确保本地配置正确关联到personal账号
当personal账号获得权限后,你需要确保本地Git和SSH客户端正确使用这个密钥来关联personal账号:
1. 确认SSH密钥已正确添加到personal账号
登录GitHub的personal账号,进入「Settings」→「SSH and GPG keys」,确认你转移过来的密钥已经在列表中,并且work@gmail.com账号下已经移除了该密钥。
2. 配置本地SSH客户端指定密钥
为了避免和其他GitHub账号的密钥冲突,建议在~/.ssh/config(Windows用户是C:\Users\你的用户名\.ssh\config)中添加针对personal账号的配置:
Host github.com-personal HostName github.com User git IdentityFile ~/.ssh/你的密钥文件名(比如id_rsa_work)
这样当你用git@github.com-personal作为远程地址时,SSH会自动使用指定的密钥。
3. 修改本地仓库的远程地址
进入本地仓库目录,运行以下命令替换远程地址:
git remote set-url origin git@github.com-personal:仓库所有者用户名/仓库名.git
4. 配置仓库级的用户信息(可选但推荐)
为了确保提交记录显示的是personal账号的信息,进入本地仓库目录运行:
git config user.name "你的Personal GitHub用户名" git config user.email "personal@gmail.com"
如果用全局配置(git config --global ...)会影响所有本地仓库,所以更推荐仓库级配置。
5. 测试SSH连接
运行以下命令验证是否能成功关联到personal账号:
ssh -T git@github.com-personal
如果输出Hi [你的Personal用户名]! You've successfully authenticated, but GitHub does not provide shell access.,说明配置成功。
完成以上步骤后,你就可以用这个SSH密钥(关联personal账号)正常推送代码到目标仓库了。
内容的提问来源于stack exchange,提问作者ANSHU GOYAL




