配置ssh密钥

在之前的博文《使用Hexo搭建博客》介绍了使用ssh方式登录github,但是那是初步部署博客时写的,随着使用,我需要将工作的办公的博客分开,同时办公的博客更新频率较低,所以这就需要在一台电脑上使用不同的ssh密钥,来管理不同的githubgitee帐户,本文记录这个具体配置过程。

  1. 生成SSH Key ,如果没有配置过,则系统内没有 ~/.ssh 文件夹,此时需要先建立一下。即
1
2
$ mkdir ~/.ssh
$ ls -l ~/.ssh

此时我之前已经设置了一次密钥,于是可以等到如下显示

1
id_rsa id_rsa.pub known_hosts
  1. 再生成一对密钥,因为第一对密钥只能管理一个帐户。即
1
2
3
4
5
6
7
$ ssh-keygen -t rsa -C "emailname@email.com" 
Generating public/private rsa key pair.
Enter file in which to save the key(~/.ssh/id_rsa):~/.ssh/id_rsa_two
Enter passphrase(empty fo no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_rsa_two
Your public key has been saved in ~/.ssh/id_rsa_two.pub

此时不要一直按Enter键, 要重新输入路径和密钥名字,即第二行。此时 ~/.ssh/ 内将会保存两组公钥和两组私钥。

  1. 配置密钥,这步操作的理由是对每组密钥取一个名字,以方便在git调用密钥时知道调用的是哪一个,如果不配置则一直调用默认的一个。
1
$ vim ~/.ssh/config

config文件便是区分各密钥的配置,其内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# github one
Host github_key_one
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# github two
Host github_key_two
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_two
# gitee_key_one
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# gitee_key_two
Host gitee_two.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_two

这里作一下解释,我们生成的文件id_rsaid_rsa_two 相当于两把钥匙,我们使用哪一把钥匙进入哪一个githubgitee帐户需要一个文件来指明,同时对应用于此帐户的钥匙起一个名字。比如,应用于网站github.com 的钥匙一共有两个,一个起名 github_key_one 另一个起名 github_key_two ,当我们在一个github仓库部署了密钥id_rsa后,在使用git管理此仓库时就可以使用钥匙的名字github_key_one来打开它,同理也可以在部署了id_rsa_twogithub帐户中,使用第二把钥匙的名字github_key_two来打开第二个仓库。由于giteegithub不是相同的网站,所认这两把密钥可以分别管理两个githubgitee帐户。在配置完成后,需要进行测试,比如

1
2
$ ssh -T git@github_key_two
Hi fengzhenhua-vip! You've successfully authenticated, but GitHub does not provide shell access.

上述结果表时,github上的帐户 fengzhenhua-vip使用密钥github_key_two 。同时,进行其他测试时,也会得出类似的结论。

  1. clone 一个仓库,然后进行配置密钥。比如
1
$ git clone git@gitee_key_one:fengzhenhua/check-on-attendence  ./test

上述命令解释为:git使用名字为gitee_key_one的密钥,而这个密钥对应的网站是gitee.com,所以上述命令就是拉取 gitee.com 上的 fengzhenhua/check-on-attendence 仓库,并且该仓库配置了密钥id_rsa_two ,之的对此仓库进行管理,增删文件后,就可以使用git add , git commit -t ,git push 等命令管理了。 如果对于本地的一个现成的仓库,要push到此仓库,则需要配置文件

1
$ vim .git/config

此配置文件重点是如下第7行,

1
2
3
4
5
6
7
8
9
10
11
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@gitee:fengzhenhua/check-on-attendence
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
  1. hexo的配置,需要个性文件_config.yml
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
  type: git
 #repository: git@github.com:fengzhenhua-vip/fengzhenhua-vip.github.io.git
  repository: git@gitee_key_one:fengzhenhua/fengzhenhua.git
  branch: master

注意,上述第5行是github的配置方式,第6行是gitee的配置方式。对于github在网页进入到帐户后设置密钥即可,但是gitee需要设置的是个人密钥才可以具备写的权限,否则只有下载权限,这一点要特别注意。