|
- #!/bin/bash
- set -e # 命令失败立即终止
- # 配置参数
- NAME="你的域名"
- FNOS_PATH="/usr/trim/var/trim_connect/ssls/你的域名/系统生成的纯数字文件夹_自己去目录找"
- NEW_SSL_PATH="1panel自动申请SSL后推送的文件夹"
- SUDO_PASSWORD='sudo密码_一般是你当前账号的密码'
- # 检查目标目录中证书文件是否存在
- if [[ ! -f "$NEW_SSL_PATH/fullchain.pem" || ! -f "$NEW_SSL_PATH/privkey.pem" ]]; then
- echo "错误:目标目录未找到推送的证书文件!"
- exit 1
- fi
- # 在目标目录内重命名证书(添加sudo权限)
- echo "$SUDO_PASSWORD" | sudo -S mv "$NEW_SSL_PATH/fullchain.pem" "$FNOS_PATH/$NAME.crt"
- echo "$SUDO_PASSWORD" | sudo -S mv "$NEW_SSL_PATH/privkey.pem" "$FNOS_PATH/$NAME.key"
- # 设置目录及子文件权限(递归,添加sudo权限)
- echo "$SUDO_PASSWORD" | sudo -S chmod -R 0755 "$FNOS_PATH/."
- # 获取新证书到期时间(兼容毫秒级时间戳)
- NEW_EXPIRY_DATE=$(openssl x509 -enddate -noout -in "$FNOS_PATH/$NAME.crt" | sed "s/^.*=\(.*\)$/\1/")
- # 兼容不支持%3N的系统:取纳秒前3位模拟毫秒
- NEW_EXPIRY_TIMESTAMP=$(date -d "$NEW_EXPIRY_DATE" +%s%N | cut -c1-13)
- # 更新数据库中的证书有效期(添加密码自动输入)
- echo "$SUDO_PASSWORD" | sudo -S -u postgres psql -d trim_connect -c "UPDATE cert SET valid_to=$NEW_EXPIRY_TIMESTAMP WHERE domain='$NAME'"
- # 重启服务(增加容错检查,添加sudo权限)
- services=(webdav.service smbftpd.service trim_nginx.service)
- for service in "${services[@]}"; do
- if echo "$SUDO_PASSWORD" | sudo -S systemctl is-active --quiet "$service"; then
- echo "$SUDO_PASSWORD" | sudo -S systemctl restart "$service"
- echo "已重启服务:$service"
- else
- echo "警告:服务 $service 未运行,跳过重启"
- fi
- done
- echo "证书更新完成,目录及子文件权限已设置!"
复制代码
我自己./update_ssl.sh运行了一次,成功更新了。改的上方 @_v88hD 的 |
|