公司有一台电脑,使用了多个账户的ssh,今天新建一个github账号的时候,想要上传到远程仓库却出现一个问题提示:
Permission to xxx(远程仓库) denied to xxx(电脑上的账号)
大致意思是远程仓库的权限不被电脑上的github账号及其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:
再次确认。
好啦,现在找到.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文件,如果有就不用啦
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)
我们这里仿照一下,把[email protected]这个默认的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地址
git config user.name "你的另一个用户名"
git config user.email "你的另一个邮箱"
https://www.jianshu.com/p/12badb7e6c10