远程上传证书并调用更新脚本

远程上传证书并调用更新脚本

背景: 由于有多个服务器需要更新 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!"