问题场景

公司有一台电脑,使用了多个账户的ssh,今天新建一个github账号的时候,想要上传到远程仓库却出现一个问题提示:

 Permission to xxx(远程仓库) denied to xxx(电脑上的账号)

大致意思是远程仓库的权限不被电脑上的github账号及其ssh秘钥所认可。

新建ssh

想一想,这是当然的了,新建的github账号在这个电脑上又没有设定ssh,于是我去新建了一个ssh:

 ssh-keygen -t rsa -C "XXXXXXXX"

然后terminate会提示:

 Enter file in which to save the key (/Users/zhengrunming/.ssh/id_rsa): 

这里由于id_rsa这个ssh文件的名字已经被我们之前账号所占用了,所以我们随便取一个其他的名字:n

 Enter passphrase (empty for no passphrase):

输入passphrase,我这直接回车

 Enter same passphrase again:

再次确认。


同步github上的ssh

好啦,现在找到.ssh文件夹(就在用户目录下隐藏),打开文件夹可以看到新的ssh已经生成,n(私钥)和n.pub(公钥)

那么我们使用

 cat n.pub

打开公钥,把里面的内容拷贝到github新建账户中的ssh key中(详见廖雪峰git教程的远程仓库那一节)

这样第一步就完成了,本机上的ssh key已经于github账户互通


查询资料

再次尝试git push,可是还是提示:

Permission to xxx(远程仓库) denied to xxx(电脑上的账号)

这就蛋疼了,问题还是没有解决。

上网查询资料,原来是github虽然有了你的一个pub key,但是电脑上有两个ssh,其中一个才是你自己私用的,那么github就蒙了,不知道哪一个才是你新账户的ssh,这个时候就需要我们手动配置一下啦。
参考:
https://www.jianshu.com/p/12badb7e6c10


配置ssh文件夹中的config

我们打开ssh文件夹,创建config文件,如果有就不用啦

 vim config

配置一下:

  #Default GitHub
  Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

  #new github
  Host github-boreas6
  HostName github.com
  User git
  IdentityFile ~/.ssh/n

这里可以清楚的看到,上面一大段是github默认的配置,也就是之前具有id_rsa账号的配置。那么我们需要仿照着新配置一个,告诉github拥有n这个ssh的账号是哪个就可以了,也就是这一段:

  #new github
  Host github-boreas6//修改这里
  HostName github.com
  User git
  IdentityFile ~/.ssh/n//修改这里

修改一下host的内容,加以辨别即可。


配置远程地址

再回到项目,重新配置一下远程:
首先看一看之前的Host地址是什么:

 git remote -v

返回:

origin  git@github.com:Boreas6/word-collection.git (fetch)
origin  git@github.com:Boreas6/word-collection.git (push)

我们这里仿照一下,把git@github.com这个默认的host名称改成我们之前新设定的就可以了

 git remote set-url origin  github-boreas6:Boreas6/word-collection.git

再看一下有没有改成功:

  git remote -v

返回:

origin  github-boreas6:Boreas6/word-collection.git (fetch)
origin  github-boreas6:Boreas6/word-collection.git (push)

修改成功!


重新提交

再试试提交

 git push 

成功了!

总结

总结一下,关键点有:
1. 新建一个ssh
2. 配置config,增加新的host配置上面创建的ssh
3. 使用remote set-url 配置host地址

ps

  • 如果是之前账户确认不用的场景,直接删除ssh文件中的内容,再新建一个ssh更快哦
  • 使用以下代码配置新账号的用户名和邮箱
git config user.name "你的另一个用户名"
git config user.email "你的另一个邮箱"

本文参考:

https://www.jianshu.com/p/12badb7e6c10

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐