背景

当有多个git账号时,比如:

  • 一个gitee,用于公司内部的工作开发;
  • 两个github,用于自己进行一些开发活动;

步骤

生成公钥和私钥对

1.生成一个公司用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/gitee_id_rsa
2.生成一个github用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxxxone@qq.com' -f ~/.ssh/github_id_rsaone
3.生成另外一个github用的SSH-Key
$ ssh-keygen -t rsa -C 'xxxxxtwo@qq.com' -f ~/.ssh/github_id_rsatwo
命令运行完之后会在~/.ssh 目录下生成3对公钥和私钥。公钥末尾的值自动跟上面输入的邮箱对应。

gitee_id_rsa gitee_id_rsa.pub
github_id_rsaone github_id_rsaone.pub
github_id_rsatwo github_id_rsatwo.pub

配置config文件

在 ~/.ssh 目录下新建一个config文件,~对应windows下的用户目录,添加以下内容。
其中HostName为git服务器的域名,Host为下载代码时需要替换的域名。IdentityFile指定私钥的路径,私钥名称跟上面保持一致。

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
# github
Host github.com.one
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsaone
# github
Host github.com.two
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsatwo

配置公钥到git,分别对应3个不同的账户

登录github,配置公钥


不好啦,图片不见啦~~

用ssh命令分别测试

$ ssh -T git@gitee.com
$ ssh -T git@github.com.one
$ ssh -T git@github.com.two

这里以github为例,成功的话会返回下面内容

Hi javahikers! You've successfully authenticated, but GitHub does not provide shell access.

下载代码注意事项

1.路径以http://开头,可以下载。提交代码时,会提示没有权限。

git clone https://github.com/javahikers/algorithms-studying.git

2.路径以git@ 开头,下载代码时会进行权限校验。只有登录github之后才能切换成git开头的路径。如果自己开发,推荐使用这种方式。
将github.com替换成config文件中配置的Host。

git clone git@github.com.two:javahikers/algorithms-studying.git

3.不变更路径会提示没有权限下载

$ git clone git@github.com:javahikers/algorithms-studying.git
Cloning into 'algorithms-studying'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.