git配置多个SSH Key

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

一个github,国际认可的仓库
一个gitee码云,国内仓库,速度快
这两者如果邮箱不同的话,在生成第二个key的时候会覆盖第一个的key,导致一个用不了。

解决办法就是:

生成两个(或多个)不同的公私密钥对,用config文件管理它们。

1 步骤

我们假设原来在~/.ssh目录下已经生成了一个密钥对:

id_rsa
id_rsa.pub

1.1 生成第二个key

接下来我们生成第二个ssh key:

ssh-keygen -t rsa -C "yourmail@gmail.com"

这里不要一路回车,我们自己手动填写保存路径:

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Gary/.ssh/id_rsa): /c/Users/Gary/.ssh/id_rsa_github

<剩下两个直接回车>
这里我们用id_rsa_github来区别原有密钥对,避免被覆盖。

完成之后,我们可以看到~/.ssh目录下多了两个文件,变成:

id_rsa
id_ras.pub
id_rsa_github
id_rsa_github.pub
known_hosts

1.2 打开ssh-agent

这里如果你用的github官方的bash,用:

ssh-agent -s

如果是其他的,比如msysgit,(windows下需要使用git-bash,不能用powershell等)用:

eval $(ssh-agent -s)

略过这一步的话,下一步会提示这样的错误:Could not open a connection to your authentication agent.

Ps:
所谓“打开ssh-agent”,即开启ssh-agent服务。
Windows下可以这样开启:
Windows下使用ssh-add报错 Error connecting to agent: No such file or directory
也可以这样开启:
SSH key的介绍与在Git中的使用

如果提示 “Could not open a connection to your authentication agent.” 说明你的ssh agent并没有运行;使用下面的命令运行ssh agent,再使用ssh-add命令添加你的ssh key。

# macOS/Linux
$ eval `ssh-agent`

# 在Windows中的git-bash中
$ eval $(ssh-agent) 

1.3 添加私钥

ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_github

如果提示文件或目录不存在,就使用绝对地址。

Ps:
Windows下使用ssh-add报错 Error connecting to agent: No such file or directory
windows下使用密钥进行ssh连接出现私钥文件未保护警告-Permissions for ‘C:\Users\zhangjiequan\.ssh\id_rsa’ are too open

Bad owner or permissions on .ssh/config win10问题解决

在这里插入图片描述

1.4 创建config文件

在~/.ssh目录下创建名为config的文件。

添加以下内容:

# gitee and github
# 注意:多个Host公用一个公钥时,
# 对应的HostName和Port必须跟在Host后面
    Host gitee.com
    HostName gitee.com
    Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa

# gerrit
    Host gerrit.awaimai.com
    HostName gerrit.awaimai.com
    Port 8000
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gerrit

# home_gitlab
    Host 119.34.4.123
    HostName 119.34.4.123
    Port 9200
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_home_gitlab
    #注意,这里多个Host公用一个公钥,如果像原文作者说的那样,两组Host&HostName&Port依次写,会不能正确识别第一组,ssh -T git@第一组Host,会报Permission denied (publickey),不懂。先分开写,分开写是可以的。
	Host 192.168.2.164
    HostName 192.168.2.164
    Port 30001
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_home_gitlab

# 其他的统一用id_rsa文件登陆,或者密码。
# 注意:这里的第二行后面有个password,就是同时允许密码登陆
# 不然第一次没加公钥,密码也登陆不了,会提示错误:Permission denied (publickey,password).
    Host *
    PreferredAuthentications publickey,password
    IdentityFile ~/.ssh/id_rsa

其中,Host和HostName填写git服务器的域名。

IdentityFile指定私钥的路径。

如果在Linux系统下提示错误:Bad owner or permissions on /home/gary/.ssh/config

说明config权限过大,chmod命令调整:

$ chmod 644 ~/.ssh/config
然后在github和gitee码云上添加公钥即可,这里不再多说。

Ps:
SSH Config 那些你所知道和不知道的事

上面的home_gitlab是一个ip+端口的形式的示例.

1.5 测试

然后用ssh命令分别测试:

ssh -T git@github.com

ssh -T git@gitlab.bbbb

ssh -T git@192.168.2.164

在这里插入图片描述
在这里插入图片描述

2 调试

如果到这里你没有成功的话,别急,教你解决问题的终极办法–debug

比如测试github:

ssh -vT git@github.com

-v 是输出编译信息,然后根据编译信息自己去解决问题吧。

就我自己来说一般是config里的host那块写错了。

3 关于用户名

如果之前有设置全局用户名和邮箱的话,需要unset一下

git config --global --unset user.name
git config --global --unset user.email

然后在不同的仓库下设置局部的用户名和邮箱

比如在公司的repository下

git config user.name "yourname" 
git config user.email "youremail"

在自己的github的仓库在执行刚刚的命令一遍即可。

这样就可以在不同的仓库,已不同的账号登录。

用户名这个有点坑哦

Ps:
端口+ip 如何clone?
在这里插入图片描述

ssh://git@localhost:30001/family/bookvaccine.git

然后具体的ip和端口为上面的home_gitlab,那么可以这样子clone

git clone ssh://git@192.168.2.164:30001/family/learn-git.git

git clone ssh://git@119.34.4.123:9200/family/bookvaccine.git

在这里插入图片描述

参考地址:

http://www.jianshu.com/p/f7f4142a1556
https://www.jianshu.com/p/b1eeb3f1a2c1

Ref:git配置多个SSH Key

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值