Git 学习笔记(1)管理一台电脑上的多个公钥

1. 前提条件

 安装 Git。

廖雪峰老师的 Git 教程
Git 官网

2. 创建公钥

 打开.ssh文件夹(位于:C:\Users\Administrator\.ssh),右键文件夹空白处,打开 Git BashGit Bash here

 创建命令:

$ssh-keygen -t rsa -C "emailname@example.com" # 邮箱名自定

 设置存储公钥的文件名:(可以直接回车跳过,默认文件名为id_rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/325-43/.ssh/id_rsa): id_rsa_rswork

 之后设置密码啥的直接跳过就可以了(如果不是特别必要的话)。

3. 添加公钥到远程仓库

 公钥的所有内容(一大串以我们设置的邮箱结尾的字符串)都存放在.pub文件中,添加到对应的远程仓库就可以啦。

4. 管理多个公钥

 此时有两个公钥:
在这里插入图片描述
 一个公钥只能给一个远程仓库账户使用,当我们使用多个账户或者使用不同平台(GitHub,GitLab,码云……)的仓库时,当进行clonepush操作时,极有可能出现如下情况:(Access Denied,说明这是私有项目,直接clone,不出现问题才不正常呢。。。)

$git clone git@gitee.com:XXX/xxx.git
Cloning into 'xxx'...
Access denied: Access Denied
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

 在默认情况下,Git 会检验.ssh文件中 id_rsa.pub 的公钥对于 clonepush 的仓库的可访问性,当出现多个公钥时,我们就需要告诉 Git 如何使用正确的公钥来访问项目。

 比如现在,我所访问的这个项目是一个私有项目,而我已经将 id_rsa_rswork.pub 中的公钥添加到了该账号下的ssh中了,然而直接clone依旧提示Access Denied,说明 Git 并没有正确使用公钥,我们打开.ssh文件夹,在文件夹下创建文件 config,在里面写入:

HOST pubKey1
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa_rswork

 保存,退出。其中,pubKey1是自定义的变量名,用于告诉 Git 应该使用哪个公钥

 此时我们使用如下命令来克隆仓库:

$git clone pubKey1:XXX/xxx.git

 成功。

简要原理

 当我们 clonepush 不同账户或不同平台仓库时,我们希望能控制在不同的地方使用不同的公钥

 注意到仓库提供的克隆 ssh 为:(XXX是账户名,xxx是仓库名,git@gitee.com 类似于标识信息

git@gitee.com:XXX/xxx.git  # 码云
git@github.com:XXX/xxx.git # github

 当我们使用官方提供的标识信息时,默认只读取 .ssh 文件夹下 id_rsa.pub 中的公钥。

config

HOST pubKey1
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa_rswork

 配置文件 config 的内容大致呈 1 + 3的结构, HOST 类似于变量名,该变量下由HostNameUser来定义标识信息,IdentityFile 则声明了公钥的位置,因此我们可以使用如下命令来克隆仓库:

$git clone pubKey1:XXX/xxx.git

归纳:push和clone

 指定公钥后,相应的pushclone操作如下:

$git clone pubKey1:XXX/xxx.git # clone

# 添加并查看远程仓库
$git remote add gitee pubKey1:XXX/xxx.git
$git remote -v
gitee   pubKey1:XXX/xxx.git (fetch)
gitee   pubKey1:XXX/xxx.git (push)
# push
$git push gitee master

end

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页