public:linux:update_certs

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

背景: 由于有多个服务器需要更新 https 证书,如果每个服务器单独更新自己的证书,在迁移应用的时候,需要把证书也迁移过去,非常麻烦。因此考虑由一台服务器进行更新 https 证书,并通过 ssh 分发和调用更新命令。

前期准备:

  • 做好 ssh 免密码登录。
  • 每台服务器创建 /etc/certs 目录用于存放证书,并创建 /etc/certs/reload.sh 脚本用于如何更新证书。

运行过程:

  1. 把当前目录下的 ./certs 里的证书通过 ssh 上传到远程服务器上
  2. 调用远程服务器上的 reload.sh 脚本。

应用场景: 使用 acme.sh 进行定时更新证书,更新完毕后调用此脚本给其他服务器更新证书。

#!/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!"

  • 最后更改: 2021/06/26 16:24
  • 由 Jinkin Liu