远程上传证书并调用更新脚本
背景:
由于有多个服务器需要更新 https 证书,如果每个服务器单独更新自己的证书,在迁移应用的时候,需要把证书也迁移过去,非常麻烦。因此考虑由一台服务器进行更新 https 证书,并通过 ssh 分发和调用更新命令。
前期准备:
- 做好 ssh 免密码登录。
- 每台服务器创建 /etc/certs 目录用于存放证书,并创建 /etc/certs/reload.sh 脚本用于如何更新证书。
运行过程:
- 把当前目录下的 ./certs 里的证书通过 ssh 上传到远程服务器上
- 调用远程服务器上的 reload.sh 脚本。
应用场景:
使用 acme.sh 进行定时更新证书,更新完毕后调用此脚本给其他服务器更新证书。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #!/bin/bash
# Author: liujun <ljskryj@163.com>
# Date: 2020-12-27
# Description:
# 远程上传证书并调用 reload 脚本。
# upload certs and run remote reload.sh .
set -e
DIR=$(dirname "${BASH_SOURCE[0]}")
cd "${DIR}"
echo "start update certs"
SERVERS=("server1" "server2" "server3" )
BASE_DIR=/etc/certs
for SERVER in "${SERVERS[@]}"
do
echo "=> start for server $SERVER"
echo " [$SERVER] mkdir dir $BASE_DIR"
ssh $SERVER "if [ ! -d '$BASE_DIR' ]; then mkdir $BASE_DIR ; fi"
echo " [$SERVER] mkdir done!"
echo " [$SERVER] copy certs"
scp ./certs/gulucat.key $SERVER:$BASE_DIR/
scp ./certs/gulucat.crt $SERVER:$BASE_DIR/
echo " [$SERVER] copy done!"
echo " [$SERVER] call reload cmd"
ssh $SERVER "if [ -f '$BASE_DIR/reload.sh' ]; then bash $BASE_DIR/reload.sh ; fi"
echo " [$SERVER] reload done!"
done
echo "all done!"
|