Git多ssh-key配置

Catalogue
  1. 1. ssh-keygen
  2. 2. 修改配置文件
  3. 3. 添加公钥到各站点
  4. 4. 测试SSH配置是否正常访问

由于github pages国外网络访问较慢,故准备将blog迁至国内coding pages。又因两网站email不同,导致同一ssh key不同两用,没得法,只能采用多网站多key方式部署。

之所以采用git ssh方式,主要是避免每次push都得输入用户名密码操作。采用https则必须每次输入用户信息。

通过公钥认证可实现ssh免密码登陆,git的ssh方式也是通过公钥进行认证的。

在用户目录的home目录下,有一个.ssh的目录,和当前用户ssh配置认证相关的文件,几乎都在这个目录下。

ssh-keygen

ssh-keygen可用来生成ssh公钥认证所需的公私钥。

使用 ssh-keygen 时,请先进入到 ~/.ssh 目录,不存在的话,请先创建。并且保证 ~/.ssh 以及所有父目录的权限不能大于 711

  1. 生成的文件名和文件位置

使用 ssh-kengen 默认会在~/.ssh/目录(第一次使用ssh前应该是不存在的)下生成两个文件,不指定文件名和密钥类型的时候,默认生成的两个文件是:

1
2
id_rsa
id_rsa.pub

第一个是私钥文件,第二个是公钥文件。

  1. 生成的公私钥文件名

生成ssh key的时候,可以通过 -f 选项指定生成文件的文件名,如下:

1
2
3
$ ssh-keygen -C "test key" -f github
```
如果没有指定文件名,会询问你输入文件名:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/huqiu/.ssh/id_rsa):

1
2
3
4
5
6
7
8
9
10
11
12
你可以输入你想要的文件名,这里我们输入test。
3. 私钥使用的密码
生成公私钥的时候询问你是否需要输入密码。输入密码之后,以后每次都要输入密码,而且就算别人等到的私钥,没有密码的话也是无法使用私钥解密的。请根据你的安全需要决定是否需要密码,如果不需要,直接回车即可。
## 生成SSH多公私钥对
1. 首先根据coding.net的注册邮箱生成密钥对
如下命令:
``` bash
$ ssh-keygen -t rsa -C "myemail@coding.net" -f ~/.ssh/id-rsa

以上myemail@coding.net是你在coding.net的邮箱。
以上在windows上操作。如果是首次使用ssh,则C:\Users\Administrator目录下应该不存在.ssh文件夹。

  1. 根据github的注册邮箱生成密钥对。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ ssh-keygen -t rsa -C "myemail@coding.net" -f ~/.ssh/github
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/github.
Your public key has been saved in /c/Users/Administrator/.ssh/github.pub.
The key fingerprint is:
SHA256:aAcxf3MHgiut+q7Eo9eVPUwLldZl7fJG8rGKAF6MW6I myemail@coding.net
The key's randomart image is:
+---[RSA 2048]----+
| oo .+..+. |
| + +=+ ooo.. |
| o *ooo.o=.+. |
| E o oBoo o*.. |
| ++S. o . |
| . ..o... |
| +.. |
| . +.o |
| o o+o |
+----[SHA256]-----+

以上操作执行完后,~/.ssh目录结构:

1
2
$ ls
github github.pub id_rsa id_rsa.pub

修改配置文件

在 ~/.ssh 目录下新建一个config文件(如果没有的话)

1
touch config

在新建的config中指定coding和github所使用的密钥对。
采用如下语法添加:

1
2
Host coding.net
IdentityFile ~/.ssh/id_rsa

Host指定站点
IdentityFile指定所使用的密钥对
比如我们这位coding.net和github.com指定密钥对
则config中添加如下内容:

1
2
3
4
Host coding.net
IdentityFile ~/.ssh/id_rsa
Host github.com
IdentityFile ~/.ssh/github

添加公钥到各站点

将之前生成的公钥分别添加到各站点
比如为coding添加公钥如下:
coding添加公钥

测试SSH配置是否正常访问

以上操作完成后,可通过如下命令测试能否SSH免密连接

1
ssh -T git@github.com

以上测试连接github,也是自行测试coding.net。如果输出如下内容则表示成功:

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

注意:首次连接会提示是否确认通过ssh连接,按要求输入yes即可。

Comments