配置一个SSH Key

  1. 生成ssh公私钥(默认就是2048字节, 邮箱也可以不加,邮箱是作为title存在, 所以可以配置个有标识性的名称之类的): ssh-keygen -t rsa -C "yourEmailAddr" -b 2048

  2. 如果ssh密码没有配置在默认路径, 需要按照如下步骤进行配置

    启动ssh-agent:eval ssh-agent -s
    添加私钥到agent【ssh-add "私钥文件地址" 】 如:ssh-add "c:/Users/xxx/.ssh/id_rsa"

    • 第二步提示:Could not open a connection to your authentication agent,执行ssh-agent bash
  3. 将公钥添加到远端库ssh管理处(github/gitee/gitlab)

  4. clone 代码:git clone git@xxx.git

配置多个SSH Key

场景描述

开发人员通常只会生成一个SSH Key,名字叫id_rsa,然后提交到多个不同的网站(如:GitHub、CodeArts或Gitlab)。

但是也存在另一种需要,在同一个网站上,注册了两个用户名,通常网站不会允许为这两个用户名,配置同一个SSH Key,这时候就会有些麻烦。

操作步骤

在本地Git仓库生成两个不同的SSH Key

1
2
3
4
ssh-keygen -t rsa -C "email"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): <不要直接回车,填写自己定义的名字,例如`C:\Users\94391\.ssh\id_rsa_gitlab`>
Enter passphrase(empty for no passphrase):

说明:

这里是关键,如果要生成2个Key,分别对应github和gitlab,这里写成:id_rsa_gitlabid_rsa_github。这样,就生成了2个证书。如下

用不同的帐号,上传两个不同的证书

读取*.pub的内容,粘贴到服务网站上。记住对应的用户名。

编辑**~/.ssh/config**文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# gitlab
Host gitlab
# 这里填公司的git网址即可
HostName *******.com
IdentityFile ~/.ssh/id_rsa_gitlab
PreferredAuthentications publickey
User username1

# github
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa_github
PreferredAuthentications publickey
User username2

要点在于Host与HostName的区别:

  • HostName:是填写真实的服务地址。
  • Host:是填写别名,后面会用上。
  • IdentityFile:填写的是证书的所在位置,你也可以把证书保存在任何地方。

读写代码

原本在Web页面上复制的SSH URL,可以直接使用,例如:

1
git@*****.com:name/repo.git

但是,现在根据你的帐号不同,需要自行替换【gitlab / github】:

1
git@github.com:name/repo.git 或 git@gitlab:name/repo.git

补充

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

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

然后在不同的仓库下设置局部的用户名和邮箱
比如在公司的repository下git config user.name "yourname"git config user.email "youremail" 在自己的github的仓库在执行刚刚的命令一遍即可。

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