6 特别情况 一对公私钥的公钥只能配给远程仓库中的一个账号
例如,当一对公私钥的公钥配给Gitee的某个账号后,其他账号就不允许再配置这个公钥了
反过来,一个账号可以配上多台电脑的公钥,这样每台电脑都能用ssh方式连接这个账号下的所有项目,可以执行的操作包括
①用ssh方式克隆任何远程仓库上的任何开源项目
②用ssh方式push代码到配对的远程仓库账号的任意代码,并且可以任意指定分支
7 单台电脑上配置多对公私钥
Windows下Git多账号配置,同一电脑多个ssh-key的管理 - popfisher - 博客园 (cnblogs.com)
git本地管理多个密钥/账户(原创) - 简书 (jianshu.com)
Could not open a connection to your authentication agent_argleary的博客-CSDN博客
一个Git终端如何配置多个Git仓库和账户 - 知乎 (zhihu.com)
Git之同一台电脑连接多个远程仓库 - 简书 (jianshu.com)
后续:我在一台电脑上生成两对钥匙,分别配置到gitee的两个账号中,但是这两把钥匙生成时均为我的QQ邮箱,config中的设置 除了host不一样 其他都一样
这样是不行的,会报错 一个都用不了
我猜所谓的单电脑上配置多把钥匙,应该是要求每把钥匙在config中的user不能一样
在使用git的过程中,一般都只关注单账号的情况,工作中的配置也是直接由自己的上级发一个配置文档之类的东西,然后对着搞一遍就行了
但是如果在一台电脑上,希望能实现对多个账号的ssh连接,此时就要分别生成公私钥,然后分别配置公钥,并且编写一个config配置文件
7.1 生成新的公私钥
依然是使用下面的代码
ssh-keygen -t rsa -C 你的邮箱
第一步,Enter file in which to save the key,提示我们输入公私钥的生成路径,按下回车则使用默认名字以及默认路径,默认会存放在c盘的用户名下的.ssh文件夹下
如果粘贴新路径,就会变更生成路径
如果输入一段字符串,那么就会以该字符串作为公私钥文件名
如果和已有公私钥文件名相同,那么原公私钥文件会被覆盖
第二步,Enter passphrase,提示我们输入push项目时要输入的验证密码,这是为了防止别人随便在你的项目上push东西,如果不想每次操作都输入密码,可以不填
在输入时,命令行不会显示出你输入的字符串(好简陋且缺少体验的防护措施)
第三步,Enter same passphrase again,再一次输入刚刚输入的密码,如果刚才没输入,则直接回车
上面的二、三步可以按回车,直接以默认方式跳过
最后显示如图:
此时就会生成第二把公钥和私钥
7.2 将公钥配置到账户上
如图,在gitee上给账号配置公钥
7.3 添加新 ssh Key
默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent
$ ssh-add ~/.ssh/id_rsa_me
如果出现下图的错误
就重置SSH agent,然后重新配置所有私钥
$ ssh-agent bash
7.4 在.ssh目录创建config文本文件
如果已经有,跳过这一步,如果没有,则有两种方式创建
方式一,直接在文件夹下新建一个txt文件,将后缀名.txt去掉,将文件名改为config
方式二,使用git的命令行,输入下面代码创建
touch config
7.5 在config中完成相关配置(最核心的地方)
需要在config中对当前所有公私钥进行配置,例如现在有两对公私钥,那么就在config中配置如下
# 配置gitee的第一个账户
Host gitee1
HostName gitee.com
IdentityFile C:\\Users\\\Administrator\\.ssh\\id_rsa
PreferredAuthentications publickey
User xxxxxx
# 配置gitee的第二个账户
Host gitee2
HostName gitee.com
IdentityFile C:\\Users\\\Administrator\\.ssh\\id_gitee_two
PreferredAuthentications publickey
User BRSblackshoot
具体说明
每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性
|
语法
|
说明
|
|
Host 别名
|
网站的别名 可以取为自己喜欢的名字,通常可以用 自定义前缀 . 网站域名
|
|
HostName
|
托管网站的域名 (github就是github.com gitee就是gitee.com或git.oschina.net)
|
|
IdentityFile
|
使用的密钥文件 (即私钥在本地磁盘的路径)
|
|
PreferredAuthentications
|
配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
|
|
User
|
托管网站上的用户名, 最好写账户邮箱, 否则容易设置失败
|
Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:
Host mygithub 这样定义的话,命令如下,即git@后面紧跟的名字改为mygithub
git clone git@mygithub:PopFisher/AndroidRotateAnim.git
如果我们要克隆gitee的项目,一般拿到的ssh地址都是gitee.com开头,所以这个别名建议是不要改,省得从网上复制下来后还得手改
原理分析
|
1.ssh 客户端是通过类似 git@github.com:githubUserName/repName.git ** 的地址来识别使用本地的哪个私钥的,地址中的 User 是@前面的git, Host 是@后面的github.com。
2.如果所有账号的 User 和 Host 都为 git 和 github.com,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名做 CNAME 解析到 github.com,如上面配置中的Host second.github.com。
3.配置了别名之后,新的地址就是git@second.github.com:githubUserName/repName.git**(在添加远程仓库时使用)。
这样 ssh 在连接时就可以区别不同的账号了。
|
7.6 测试配置是否成功
打开Git Bash客户端(管理员身份运行)执行测试命令测试是否配置成功(会自动在.ssh目录生成known_hosts文件把私钥配置进去)
测试命令,有两种格式
|
格式
|
说明
|
|
ssh -T git@github.com
|
@后接配置文件中的HostName (即真实域名地址)
|
|
ssh -T git@ydy
|
@后接配置文件中的Host (即自己设置的别名)
|
出现如图的欢迎语,则表示成功