github多用户提交错误Permission to repo denied to

背景:同一台电脑的public key同时添加到了github的两个账户,导致user1的仓库没法正常提交。
解决办法:为两个账户分别配置ssh key,配置~/.ssh/config文件(windows下也是这个路径,在git bash中可以识别~)
错误:
$ git push
remote: Permission to user1/python.git denied to user2.
fatal: unable to access 'https://github.com/user1/python.git/': The requested URL returned error: 403
解决:
环境:windows 7+ git bash
1、在github上删除两个账户的ssh key
2、生成两个ssh key
切换到ssh key的目录
$ cd ~/.ssh/
只需要修改文件名为user1_rsa, passphrase留空回车即可。
$ ssh-keygen -t rsa -C "user1"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/waston/.ssh/id_rsa): user1_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in user1_rsa.
Your public key has been saved in user1_rsa.pub.
The key fingerprint is:
SHA256:BJ5FGpGBCwM+Vw9769IACYHKoWD8gJURyYuSNOJQjUY user1
The key's randomart image is:
+---[RSA 2048]----+
|=OEB +==o        |
|BBX =.=*         |
|@*=B o+o.        |
|*o+.o ...        |
|.    . .S        |
|      +          |
|     . o         |
|      .          |
|                 |
+----[SHA256]-----+
同样方式生成user2_rsa
3、把user1_rsa_pub的内容上传到github后台, user2同样操作
https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
4、修改~/.ssh/config文件内容为:
#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/user1_rsa
  IdentitiesOnly yes
 
Host github2
  HostName github.com
  User git
  IdentityFile ~/.ssh/user2_rsa
  IdentitiesOnly yes 
5、添加你的ssh密钥到ssh-agent中
$ eval "$(ssh-agent -s)"
Agent pid 40672
$ ssh-add ~/.ssh/user1_rsa
Identity added: /c/Users/waston/.ssh/user1_rsa (/c/Users/waston/.ssh/user1_rsa)
$ ssh-add ~/.ssh/user2_rsa
Identity added: /c/Users/waston/.ssh/user2_rsa (/c/Users/waston/.ssh/user2_rsa)
6、测试
user1仓库测试:
cat@cat-pc MINGW64 /f/github/python (master)
$ ssh -T github.com
Hi user1! You've successfully authenticated, but GitHub does not provide shell access.
cat@cat-pc MINGW64 /f/github/python (master)
$ git push
Everything up-to-date
user2仓库测试:
$ ssh -T github2
Hi user2! You've successfully authenticated, but GitHub does not provide shell access.
cat@cat-pc MINGW64 /h/z8 (master)
$ git remote -v
origin  git@github.com:user2/z.git (fetch)
origin  git@github.com:user2/z.git (push)
cat@cat-pc MINGW64 /h/z8 (master)
$ git remote set-url origin git@github2:user2/z.git
cat@cat-pc MINGW64 /h/z8 (master)
$ git push
Everything up-to-date
其它:
#提示文件不存在,检查下rsa文件名或者重新生成key
$ ssh -T github2
no such identity: /c/Users/waston/.ssh/user2_rsa: No such file or directory
Permission denied (publickey).
参考:
Git 最著名报错 “ERROR: Permission to XXX.git denied ... - 简书
Quick Tip: How to Work with GitHub and Multiple Accounts
git - Using Multiple SSH Public Keys - Super User
Error: Permission to user/repo denied to user/other-repo - User Documentation
### 解决 GitHub Push Permission Denied (publickey) 当遇到 `git push` 报错 `Permission denied (publickey)` 时,通常是因为 SSH 密钥配置错误或未正确添加到 GitHub 账户。以下是详细的解决方案: #### 检查现有 SSH 密钥 首先检查本地是否有已存在的 SSH 密钥对。打开终端并输入以下命令来查看是否存在密钥文件。 ```bash ls -al ~/.ssh ``` 如果看到类似 `id_rsa.pub` 或 `id_ed25519.pub` 的文件,则表示已有公钥[^1]。 #### 创建新的 SSH 密钥 如果没有找到现有的 SSH 密钥,可以生成一个新的 SSH 密钥对并与邮箱关联。 ```bash ssh-keygen -t ed25519 -C "your_email@example.com" ``` 这将在默认位置创建一对新密钥,并将其命名为 `~/.ssh/id_ed25519` 和 `~/.ssh/id_ed25519.pub`[^3]。 #### 添加 SSH 私钥至 ssh-agent 启动 `ssh-agent` 并加载私钥: ```bash eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ``` 此步骤确保 Git 客户端能够自动使用该私钥进行身份验证[^4]。 #### 将公钥添加到 GitHub 复制刚刚生成的公钥内容并将它添加到 GitHub 帐号的安全设置里。 ```bash cat ~/.ssh/id_ed25519.pub | pbcopy ``` 登录 GitHub 后转到账户设置 -> SSH and GPG keys 页面粘贴刚才复制的内容作为新 SSH key[^2]。 #### 测试连接 完成上述操作后可以通过下面这条指令测试是否能顺利连上服务器而不会收到权限拒绝的信息。 ```bash ssh -T git@github.com ``` 正常情况下应显示一条消息表明认证成功但无 Shell 访问权。 #### 更新远程 URL 使用 HTTPS 方式代替 SSH 协议 如果不希望继续使用SSH方式也可以考虑切换成HTTPS协议来进行版本库同步工作,在这种模式下只需要提供用户名密码即可实现推送功能。 ```bash git remote set-url origin https://github.com/username/repo.git ``` 注意替换其中 username 和 repo 参数为自己实际使用的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值