步骤
- 实现思路
- 开始配置
- 使用脚本简化远端部署步骤
实现思路
- 用《使用Hexo搭建博客》一文中部署到GitHub的方法,每次将生成的静态文件页面push到GitHub的仓库时,都需要输入GitHub用户名以及密码(或者token),比较繁琐。因此,我们可以使用SSH公钥认证来免输入密码部署。
- SSH Key,公钥认证,是使用一对加密字符串,一个称为公钥(public key),任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。通过公钥认证可实现SSH免密码登陆,git的SSH方式就是通过公钥进行认证的。
- 也就是说,我们在自己的电脑上生成一对key,把其中的
public key
配置到git服务器的项目上,private key
在自己的电脑上配置好,这时就可以在自己的电脑上往git服务器上的那个项目提交代码了。当然,前提是git服务器上的项目接受了你的公钥(一般情况下,都是自己的仓库所以这一步没有问题)。
开始配置
这里默认是同一台Mac,配置多个SSH Key。(注意:以下操作终端用户为root,如果不是root用户,显示会不太一样,但操作都是相同的)
打开终端,生成一个SSH Key
1
$ ssh-keygen -t rsa -C "youremail@xxx.com"
按下回车后:
1
2
3
4
5
6Generating public/private rsa key pair.
Enter file in which to save the key (/var/root/.ssh/id_rsa): /var/root/.ssh/id_rsa_blog_github(自己取名字)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_blog_github
Your public key has been saved in id_rsa_blog_github.pub最好每次生成时都给SSH Key取个名字,这样后面在管理时自己也一目了然。这里我所用的格式是
id_rsa_项目名_git提供方
,我生成的所有key都遵循这个规则命名。建议你也有你自己的一种命名方式,并且保持统一。如果不取名字,默认的是id_rsa
,如果后面生成时不命名,会把这个覆盖掉。密码可以不设置,免得每次提交时还要输入一次,安全性自己衡量吧。第一次生成key时,会在~
目录下创建一个.ssh
目录。进入
~/.ssh
目录1
2$ cd ~/.ssh
$ ls将key加入到
ssh-agent
中1
2
3$ ssh-add -l # 显示ssh系统代理中所有的key
$ ssh-add -K ~/.ssh/id_rsa_blog_github # 将新生成的key加入到ssh-agent中,参数-K是将SSH Key导入到密钥链中,这样系统重启时也不会“忘记”这个密钥。
$ ssh-add -l # 也可以用来查看添加结果将公钥加入到github对应的项目的Deploy keys中
复制
id_rsa_blog_github.pub
里面的内容打开GitHub对应的项目仓库,依次选择
Settings->Deploy keys->Add deploy key
将复制的内容放入GitHub中
创建本地的配置文件
~/.ssh/config
,编辑如下1
2
3
4
5
6
7
8
9
10
11
12
13# 一个SSH Key
Host blog.github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_blog_github
# 另一个SSH Key
Host conference.github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa注意:
Host的名字可以随便取,这里的规则是
项目名.git服务器源
,接下来会用到这个名字,测试是否配置正确1
$ ssh -T git@blog.github.com # (Host的名字)
连接成功,会显示;
1
Hi VKortki/VKortki.github.io! You've successfully authenticated, but GitHub does not provide shell access.
问题来了,如果我们建立了多个博客对应多个仓库,为此我们也创建了多个SSH Key,某个博客(或仓库)怎么才能知道其对应的SSH Key呢?这时Host的名字也起到很大的作用。
进入
博客所在目录
1
$ cd /你建的博客站点所在的目录
修改站点的
_config.yml
1
$ vim _config.yml
修改如下内容
_config.yml
:1
2
3
4
5
6
7# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repo: git@blog.github.com:Vkortki/Vkortki.github.io.git
# repo: git@Host的名字:用户名/仓库名.git
branch: master
使用脚本简化远端部署步骤
进入
博客所在目录
1
$ cd /你建的博客站点所在的目录
创建
deploy.sh
脚本文件1
2$ touch deploy.sh
$ vim deploy.sh将如下内容粘贴到脚本文件中并保存
1
2
3
4
5
6
7
8#!
echo "Start deployment"
hexo clean
hexo generate
hexo deploy
echo "Finish"
echo 按任意键继续
read -n 1需要部署时,运行命令
1
$ sh deploy.sh