背景
用过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 'xxx@xx.com'
-t
:加密方式(也可以是ed25519,一般是rsa)
-f
:key文件名(相对或绝对路径)
-C
:仓库账号的邮箱
不同的key取不同的名,但要注意必须放~/.ssh目录下
运行后你应该可以在~/.ssh目录下看到生成的密匙和公匙,如下图:
在远程仓库添加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 = git@github.com: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.