问题场景
公司有一台电脑,使用了多个账户的ssh,今天新建一个github账号的时候,想要上传到远程仓库却出现一个问题提示:
1 | Permission to xxx(远程仓库) denied to xxx(电脑上的账号)1 |
大致意思是远程仓库的权限不被电脑上的github账号及其ssh秘钥所认可。
新建ssh
想一想,这是当然的了,新建的github账号在这个电脑上又没有设定ssh,于是我去新建了一个ssh:
1 | ssh-keygen -t rsa -C "XXXXXXXX"1 |
然后terminate会提示:
1 | Enter file in which to save the key (/Users/zhengrunming/.ssh/id_rsa): 1 |
这里由于id_rsa这个ssh文件的名字已经被我们之前账号所占用了,所以我们随便取一个其他的名字:n
1 | Enter passphrase (empty for no passphrase):1 |
输入passphrase,我这直接回车
1 | Enter same passphrase again:1 |
再次确认。
同步github上的ssh
好啦,现在找到.ssh文件夹(就在用户目录下隐藏),打开文件夹可以看到新的ssh已经生成,n(私钥)和n.pub(公钥)
那么我们使用
1 | cat n.pub1 |
打开公钥,把里面的内容拷贝到github新建账户中的ssh key中(详见廖雪峰git教程的远程仓库那一节)
这样第一步就完成了,本机上的ssh key已经于github账户互通
查询资料
再次尝试git push,可是还是提示:
1 | Permission to xxx(远程仓库) denied to xxx(电脑上的账号)1 |
这就蛋疼了,问题还是没有解决。
上网查询资料,原来是github虽然有了你的一个pub key,但是电脑上有两个ssh,其中一个才是你自己私用的,那么github就蒙了,不知道哪一个才是你新账户的ssh,这个时候就需要我们手动配置一下啦。
参考:
https://www.jianshu.com/p/12badb7e6c10
配置ssh文件夹中的config
我们打开ssh文件夹,创建config文件,如果有就不用啦
1 | vim config1 |
配置一下:
1 | #Default GitHub |
这里可以清楚的看到,上面一大段是github默认的配置,也就是之前具有id_rsa账号的配置。那么我们需要仿照着新配置一个,告诉github拥有n这个ssh的账号是哪个就可以了,也就是这一段:
1 | #new github |
修改一下host的内容,加以辨别即可。
配置远程地址
再回到项目,重新配置一下远程:
首先看一看之前的Host地址是什么:
1 | git remote -v1 |
返回:
1 | origin git@github.com:Boreas6/word-collection.git (fetch) |
我们这里仿照一下,把git@github.com这个默认的host名称改成我们之前新设定的就可以了
1 | git remote set-url origin github-boreas6:Boreas6/word-collection.git1 |
再看一下有没有改成功:
1 | git remote -v1 |
返回:
1 | origin github-boreas6:Boreas6/word-collection.git (fetch) |
修改成功!
重新提交
再试试提交
1 | git push 1 |
成功了!
总结
总结一下,关键点有:
新建一个ssh
配置config,增加新的host配置上面创建的ssh
使用remote set-url 配置host地址
ps
- 如果是之前账户确认不用的场景,直接删除ssh文件中的内容,再新建一个ssh更快哦
- 使用以下代码配置新账号的用户名和邮箱
1 | git config user.name "你的另一个用户名" |