问题
不同邮箱配置多对密钥匙时,只有第一对密钥生效,其他密钥不生效
原因
密钥覆盖: 当您配置多对密钥时,如果后面的密钥配置覆盖了前面的密钥配置,那么只有最后一对密钥生效。这可能是因为配置文件或代码中,后面的密钥配置项覆盖了前面的密钥配置,导致只有最后一对密钥被使用。
优先级: 在某些系统中,可能有密钥使用的优先级规则。如果系统只能同时使用一对密钥,那么系统可能会选择默认的或者优先级更高的密钥。所以,如果您配置了多对密钥,可能只有默认的或者优先级更高的密钥被使用。
格式或权限问题: 另一个可能的原因是,可能有一些密钥的格式不正确或者权限不足,导致它们无法被正确识别和使用。在这种情况下,系统可能会忽略这些密钥,而只使用配置中的第一对可用密钥。
解决方案
一、生成秘钥对
# 执行以下命令一路回车
ssh-keygen -t rsa -C "youremail@youremail.com"
注意上面的邮箱可以随便写,不一定是你真实注册github或者gitlab等的邮箱,这里只是个标识
二、查看秘钥对
以Windows参考
.ssh目录一般在windows当前用户目录下。这个目录会有两个文件id_rsa、id_rsa.pub,分别是上面ssh-keygen
命令生成的。
三、配置github
1、复制上面id_rsa.pub文件内容。
2、找到github网站Settings设置
3、进入Settings设置,打开SSH and GPG keys
4、添加公钥
红色框内粘贴id_rsa.pub文件中的内容,然后点击Add SSH key按钮就好了,这样你就可以使用git clone ssh协议操作远程仓库了。
四、如何配置不同网站不同的秘钥?
1、生成多套秘钥
比如说有一个场景公司的代码远程仓库和个人都是github,但是为了安全想自己的github和公司的github使用本地不同一套秘钥。这样我们就需要在自己本地生成两套不同的秘钥对(其实也就是执行多次ssh-keygen命令
),假设生成的两套秘钥对的文件如下。
2、创建config文件
注意:这个config文件是跟id_rsa和id_rsa.pub文件在同一个路径下的,一下内容#注释具体到时候真实使用请去掉,一面影响配置的语法错误,导致加载异常。这里加上注释是为了解释相关内容。
# 你的第一个秘钥对对应的github配置
Host my_github #别名可以随便定义,但是后面必须对应着这个别名用
HostName github.com #对应真实的github域名
PreferredAuthentications publickey
User git
IdentityFile C:/Users/13758/.ssh/id_rsa #第一个秘钥对私钥文件路径
# 你的第n个秘钥对对应的github配置
Host company_github #别名可以随便定义,但是后面必须对应着这个别名用
HostName github.com #对应真实的github域名
PreferredAuthentications publickey
User git
IdentityFile C:/Users/13758/.ssh/id_rsa #第n个秘钥对私钥文件路径
3、如何使用以上配置别名
- 列表条目
git clone git@my_github:remote/test.git
- 假设这个地址是对应的第n个config配置那就是实际clone地址为:
git clone git@company_github:remote/test.git