由于家里使用的宽带没公网IP,为了接入智能音箱的skill,采取了VPS反向代理方式提供对接服务。由于对接服务需要使用https,因此申请了免费的Let’s Encrypt证书。Let’s Encrypt证书的有效期为3个月,做个自动续期脚本还是需要的,不过通配符证书只能用DNS验证,没有现成的腾讯云续签脚本,得自己写下;考虑到VPS的临时性(都是薅各种云的试用羊毛),不打算在VPS上部署证书自动续期脚本,考虑用scp命令将证书推送过去。
0.目标
家里的服务器自动续期证书,并将新证书推送到指定的VPS上。
补充
服务器系统均为Ubuntu。
1.续期
- 安装certbot工具
1 | git clone https://github.com/certbot/certbot |
- 下载腾讯云的DNS更新脚本(下载地址),编辑
qcloud.php
,填写secretId和secretKey
1 | #qcloud.php |
- 设置计划任务
1 | # 切换root用户 |
注意
自行替换[ ]
部分。
2.分发
为了使脚本可以定期自动执行,需要配置scp免密传输证书。
PC1生成钥匙对(PC1当前用户user1)
1
2# 生成钥匙对
ssh-keygen -b 1024 -t rsaTips
在程序提示输入passphrase时直接输入回车,表示无证书密码。上述命令将生成私钥证书id_rsa和公钥证书id_rsa.pub,存放在~/.ssh/目录,即当前登陆用户的用户目录中。
PC2添加信任user1(PC2当前用户user2)
1
2
3
4
5
6
7
8# 创建.ssh目录,如果已存在目录可跳过
mkdir ~/.ssh
# 设置权限,如果已存在目录可跳过
chmod 700 ~/.ssh
# 编辑authorized_keys文件,并将PC1的id_rsa.pub的内容添加到authorized_keys文件的尾部。
vi ~/.ssh/authorized_keys
# 设置权限,如果文件已存在目录可跳过
chmod 600 ~./ssh/authorized_keysTips
通过以上配置,user1可以以user2的身份登陆到PC2上进行复制,即PC1的user1用户可以免密执行
scp [本地路径] [user2]@[PC2域名或IP]:[远程路径]
。复制时候要注意PC2的user2对远程路径有写权限。
PC1设置定期推送计划任务
1
2
3
4
5
6
7# 切换到user1(PC2的信任用户)
su user1
# 设置计划任务,user1执行scp
crontab -e
# 一周运行一次,复制privkey.pem和fullchain.pem即可
0 3 * * 2 scp /etc/letsencrypt/live/[域名例如ljr.im]/privkey.pem [user2]@[PC2域名或IP]:~/cert/
0 3 * * 2 scp /etc/letsencrypt/live/[域名例如ljr.im]/fullchain.pem [user2]@[PC2域名或IP]:~/cert/Tips
申请到的https证书默认存放在
/etc/letsencrypt/live/[域名例如ljr.im]/
目录。
3.小结
- certbot工具的DNS方式续期证书,脚本需要做的工作是接收一个校验字符串,在DNS服务商平台上添加一条TXT类型、主机记录为
_acme-challeng
、值为校验字符串的记录。 - scp免密传输,实际上是本地机器用户以远程机器用户身份登录,相关配置在这两个用户相应的用户文件夹里的
.ssh文件夹
进行。
参考文章传送门: