오브리닷넷(Obbli.net)

우분투에서 certbot 인증서 갱신 자동화 및 메일 발송 본문

IT/사용팁

우분투에서 certbot 인증서 갱신 자동화 및 메일 발송

아주가끔은 2025. 9. 21. 12:00
반응형

certbot 인증서 갱신을 root 크론과 msmtp로 자동 메일 발송하는 방법

우분투 서버에서 certbot(SSL 인증서) 자동 갱신 결과를 정기적으로 이메일로 받아보고 싶다면, 이 가이드대로 자동화 구성을 할 수 있다.


1. 환경 및 권장 사항

  • 인증서 갱신은 반드시 root 권한에서 실행해야 한다. (/var/log/letsencrypt 등 certbot 내부 디렉토리의 권한 때문)
  • crontab도 root 크론탭(sudo crontab -e)에 등록해야 한다.
  • 메일 발송은 msmtp 및 특정 일반 계정의 ~/.msmtprc 설정을 root가 직접 참조하도록 한다.
  • 본 예시에서는 서버의 사용자 계정명을 serveradmin, 알림용 대표 메일을 yourid@samplemail.com 식으로 예시한다.

2. msmtp 설정(~/.msmtprc 작성)

defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

account        daum
host           smtp.daum.net
port           587
tls_starttls   on
user           yourid@daum.net
from           yourid@daum.net
password       앱비밀번호입력
logfile        /home/serveradmin/.msmtp.log

account default : daum
  • 실제 사용하는 SMTP 서버(네이버, Gmail 등) 환경에 맞게 작성한다.
  • 여기서는 daum을 써보았다.
  • 계정 메일·비밀번호 등은 모두 본인 환경에 맞게 수정한다.
  • MS 계정은 너무나 까다로워서 추천 안함.
  • 구글, 네이버, 다음은 2차 인증을 통해 앱 비밀번호 같은것을 생성해서 사용해야 한다.

3. certbot_mail_report.sh 작성

아래 스크립트를 /home/serveradmin/certbot_mail_report.sh로 저장한 뒤 실행 권한을 준다.

#!/bin/bash

export MSMTP_CONFIG=/home/serveradmin/.msmtprc

echo "스크립트 시작: $(date)" >> /home/serveradmin/cron_debug.log
whoami >> /home/serveradmin/cron_debug.log

HOSTNAME=$(hostname)
NOW=$(date "+%Y-%m-%d %H:%M")

echo "certbot 실행: $(date)" >> /home/serveradmin/cron_debug.log
OUTPUT=$(/usr/bin/certbot renew --apache --quiet 2>&1)
echo "certbot 결과: $OUTPUT" >> /home/serveradmin/cron_debug.log

if [ -z "$OUTPUT" ]; then
    STATUS="✅ 인증서 변경 사항 없음(정상)"
elif echo "$OUTPUT" | grep -qi 'failed\|error'; then
    STATUS="❗ 인증서 자동갱신 오류 발생!"
elif echo "$OUTPUT" | grep -qi 'no renewals were attempted'; then
    STATUS="✅ 만료된 인증서 없음(정상)"
elif echo "$OUTPUT" | grep -qi 'congratulations'; then
    STATUS="✅ 인증서 갱신 성공"
else
    STATUS="⚠ 확인 필요: 예상치 못한 결과"
fi

BODY="[$NOW][$HOSTNAME] $STATUS\n\n--- certbot 실행 결과 ---\n$OUTPUT"

SUBJECT_RAW="[$HOSTNAME][SSL] 인증서 갱신 요약 리포트 ($NOW)"
SUBJECT_ENC=$(printf "%s" "$SUBJECT_RAW" | iconv -t utf-8 | base64 | tr -d '\n' | sed 's/.*/=?UTF-8?B?&?=/')

{
  printf "Subject: %s\n" "$SUBJECT_ENC"
  printf "MIME-Version: 1.0\n"
  printf "Content-Type: text/plain; charset=UTF-8\n\n"
  printf "%s\n" "$BODY"
} | msmtp --file=/home/serveradmin/.msmtprc --account=mainmail yourid@samplemail.com

실행권한을 추가한다:

chmod +x /home/serveradmin/certbot_mail_report.sh

4. root 크론탭에 등록

반드시 root로 크론탭을 편집해 다음과 같이 등록한다.

sudo crontab -e

매주 금요일 오전 10시에 자동 실행하려면 아래 한 줄을 추가한다:

0 10 * * 5 /home/serveradmin/certbot_mail_report.sh >> /home/serveradmin/certbot_mail_report.log 2>&1

5. 동작 및 진단

  • 메일 수신함에서 매주 인증서 갱신 결과 및 certbot 로그까지 상세하게 받아볼 수 있다.
  • /home/serveradmin/cron_debug.log, /home/serveradmin/certbot_mail_report.log, /home/serveradmin/.msmtp.log를 통해 각 단계의 상태를 실시간 진단할 수 있다.
  • certbot 인증서 만료, 갱신, 실패 등 상황에 따라 메일로 자동 안내를 받는다.

6. 트러블 슈팅

  • certbot은 반드시 root 권한에서만 정상 작동한다. (권한 부족 시 실패)
  • msmtp가 "account not found" 등 오류를 내면 --file=/home/serveradmin/.msmtprc 옵션을 반드시 붙인다.
  • 제목이 깨질 때는 스크립트의 MIME 인코딩 코드를 확인한다.

반응형