最近和同学在合作开发一个项目,就需要协作开发,需要把代码放到github上。又不想放到自己的私人github账号,就干脆新注册了一个新的github账号。
要想给github账号中的项目提交代码,就需要把电脑上SSH key
的公钥添加到对应github账号中去,才有权限提交代码。首先想到的就把电脑上现有的SSH key
的公钥添加到github中,出现出乎意料的提示Key is already in use
。
说我的密钥已经被使用,那我就新生成一对密钥咯。打开终端,输入下面命令。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
提示Enter file in which to save the key (/Users/nchkdxlq/.ssh/id_rsa):
,如果直接按回车,会生成以id_rsa
开头命名的密钥对,会覆盖原来在.ssh
目录下面已有的id_rsa
密钥。所以需要输入生成密钥的名称singsender_rsa
,按回车之后就会在.ssh
目录下生成singsender_rsa
私钥和singsender_rsa.pub
公钥。
把singsender_rsa.pub
公钥添加到github账号中,没有提示密钥已使用,说明密钥添加成功了。
这时开心的在终端执行push
命令,发现并没有把代码push
到github上,并且给了我如下的提示。
ERROR: Permission to singsengder/test.git denied to nchkdxlq.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
为什么会出现这样的提示呢?原因是这样的,在每次push
的时候,本地的私钥都会和服务端(github
)的公钥去匹配,如果匹配成功就可以push
了;而在默认情况下,本地的私钥都会读取id_rsa
文件,而账号中对应的公钥singsender_rsa.pub
,所以当然会报没有权限的错误。
那怎样让不同的github
账号对应不同的密钥对呢?需要做两个设置
新建config文件
在~/.ssh
目录下新建config
文件并添加如下内容,该文件用于设置私钥对应的服务器。
#Default Account
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
#singsender singsender_github.com为服务器的别名
Host singsender_github.com
HostName github.com
User git
IdentityFile ~/.ssh/singsender_rsa
修改具体项目的config文件
在.git/config
文件中,有一行设置url
的配置。
默认配置
url = git@github.com:singsengder/test.git
修改后
url = singsender_github.com:singsengder/test.git
修改url
配置还有更简单的方式,在对应的项目中执行命令
git remote set-url origin singsender_github.com:singsengder/test.git
验证授权
$ ssh -T singsender_github.com
Hi singsengder! You've successfully authenticated, but GitHub does not provide shell access.
授权成功,可以往新账号的github账号提交代码了。