利用ssh config管理多个git

文章目录

  • 背景
  • 生成多个ssh-key
  • 在远程仓库添加ssh-key
  • config文件配置
  • 检测ssh配置

背景

用过github的都知道,可以通过两种方式获取远程repo。第一种是ssh,第二种是https。选择ssh是更安全的一种方式,而使用ssh需要在本地生成公匙和私匙,然后在远程仓库配置公匙,才可以连接成功。
通常情况下,我们只需要在本地生成一个ssh-key即可,但是如果我们有多个远程仓库账号,比如github、gitlab、码云以及公司内部自己搭的git,这些仓库的域名都是不同的,这时我们就需要在本地生成多个ssh-key,来区分不同的仓库和key之间的对应关系。
本文就教大家如何生成多个ssh-key,以及利用config文件配置ssh。

生成多个ssh-key

上操作,只需要一行

ssh-keygen -t rsa -f ~/.ssh/key名 -C '[email protected]'

-t:加密方式(也可以是ed25519,一般是rsa)
-f:key文件名(相对或绝对路径)
-C:仓库账号的邮箱

不同的key取不同的名,但要注意必须放~/.ssh目录下

运行后你应该可以在~/.ssh目录下看到生成的密匙和公匙,如下图:
利用ssh config管理多个git_第1张图片

在远程仓库添加ssh-key

比如github就在设置中,添加ssh公匙,就是把生成的公匙xxx.pub内容复制上去,保存即可。

config文件配置

在~/.ssh目录下创建config文件,可以用命令行

touch ~/.ssh/config

编辑config文件,内容如下:

Host 远程域名
    IdentityFile 密匙位置
    User 用户

大部分人容易写错Host和User,这里教大家如何简单地获取自己仓库的这两个参数。

首先,如果你本地已经拉了远程项目,你可以在项目根目录的/.git文件夹下发现config文件,打开config文件,你可以看到如下信息(以我自己一个GitHub仓库为例):

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
[remote "origin"]
	url = [email protected]:ly15927086342/Font-end-knowledge-repo.git
	fetch = +refs/heads/*:refs/remotes/origin/*

关注[remote “origin”]下的url,可以观察下,@前的部分是User,@后面的域名是Host,如果是以上的文件,我们可以配置以下的config:

Host github.com
    IdentityFile ~/.ssh/id_rsa_github
    User git

类推gitlab应该是这样配置

Host gitlab.com
    IdentityFile ~/.ssh/id_rsa_gitlab
    User git

所以一个config文件中配置多个ssh的写法就是:

Host github.com
    IdentityFile ~/.ssh/id_rsa_github
    User git
    
Host gitlab.com
    IdentityFile ~/.ssh/id_rsa_gitlab
    User git
...

检测ssh配置

输入以下命令

ssh -T 远程域名

例如 ssh -T gitlab.com
如果连接成功,应该会出现以下提示

Welcome to GitLab, @ly15927086342!

当然,github出现以下信息也是成功的

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

你可能感兴趣的:(ssh,git)