삽질하는 도중 설정 완료하여 메모 및 공유 차원에서 글 작성합니다.


우선 결론부터 말하자면 

SSMTP는 메일을 보낼 때 직접 입력하거나 파일에 작성된 명령어들을 수행할 수 있습니다.

직접 입력 방법

  $ ssmtp [전송받을 메일주소]

  SUBJECT: TEST

  내요오오오오옹

  CTRL + D


파일을 통해 전송하는 방법

  $ ssmtp [전송받을 메일주소] < 파일명


따라서

[실행 파일(메일전송)] -> [서버 상태 저장] -> [전송할 내용 파일 결과]

[실행 파일(메일전송)] <- [전송할 내용 파일 결과]

3개의 파일을 구성한 뒤 [실행 파일(메일 전송)]에서 [전송할 내용 파일 결과]를 불러오면 됩니다.


뭐 잘 모르시더라도 하나씩 해보면 결국 할 수 있으니 아래를 보시면 됩니다.


1) SSMTP 설치

우분투

# apt-get install ssmtp -y


Centos

# yum -y install ssmtp

설치 자체는 패키지 매니저를 통해서 받으면 편합니다.

직접 받아서 컴파일하는 방식으로도 할 수 있지만 귀찮고 복잡하므로 설명하지 않습니다.

SSMTP는 SMTP서버를 돌리지 않고 구글이나 상용 메일을 통해서 메일을 보낼 수 있는 패키지 입니다.



2) SSMTP 설정 (구글 계정 연동)

# vi /etc/ssmtp/ssmtp.conf

----파일내용----

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=아무거나 입력 (안써도 됨)

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.gmail.com:587

AuthUser=구글아이디@gmail.com
AuthPass=구글비밀번호

# Where will the mail seem to come from?
다른 도메인으로 메일을 보낼 것인가?
rewriteDomain=자신의 도메인 입력 (근데 구글에선 안됨)

# The full hostname
hostname=localhost (의미 없는듯)

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES

UseSTARTTLS=YES

각 항목에 대한 의미는 다른 블로그들에서 많이 설명하고 있으므로 설명은 생략합니다.

mailhub=smtp.gmail.com:587

AuthUser=구글아이디@gmail.com

AuthPass=구글비밀번호

UseSTARTTLS=YES

이 네가지 항목이 중요하고 나머지는 주석처리 되어도 문제없이 발송 되었습니다. (근데 중요할수도)


3-1) 전송 테스트

$ ssmtp [전송받을 메일주소]

SUBJECT: TEST

본문내요오오오오옹

CTRL + D

ssmtp 명령어를 사용할 경우 아무런 응답없이 쉘에서 한줄이 내려가 커서가 깜빡일 텐데

그냥 내용들을 입력하면 됩니다.


-v 인자를 사용할 경우 진행 상태를 쉘에 표시 해 줍니다.

ex) ssmtp -v 메일주소


앞 첫자만 대문자로 사용해도 되며 콜론은 꼭 찍어줘야 함

SUBJECT: 제목

TO: 보낼 대상 (근데 이미 명령어에 쳤으니 안써줘도 됨)

FROM: 보낸사람 (abc@abcd.efg 처럼 바꿔서 보낼수도 있으나 구글은 적용이 안됨)

본문 내용은 그냥 입력



3-2) 구글 계정 설정

패키지가 없다는 에러 메시지는 패키지를 설치해주면 됩니다. (뭐였는지 기억이 나지 않음)

정상적으로 SSMTP를 사용할 수 있는 환경이라고 가정할 때

아마 테스트 해 보면 전송이 안되고 메일함에 보안 안내메일이 도착 해 있을 것 입니다.


뭐 딱히 문제될 일 없으니 메일 본문의 아래 링크를 클릭해서

https://www.google.com/settings/security/lesssecureapps

보안 수준이 낮은 앱의 액세스 사용 중지를 선택합니다.

해킹 당하지 않도록 특별히 주의는 필요합니다.


4) 전송할 내용 작성

파일을 아무거나 하나 만들어 주시고 실행 가능하도록 755 권한을 줍니다.


$ vi check.sh

$ chmod 755 check.sh

-----파일내용------

#!/bin/sh

echo "============Server Status============"

echo "Basic Info"

hostname

date

echo "Uptime"

uptime

echo "======================================"

echo "Disk"

df -h

echo "PROCESS TREE"

pstree

echo "Port"

netstat -nlp

echo "Memory"

free -m

echo 명령어로 가독성 좋게 꾸미는건 자유롭게 수정하시면 됩니다.

그리고 나서 ./check 를 실행 해 보면 입력된 명령어들이 쭈욱 실행 되는 것을 알 수 있습니다.


이쁘게 줄바꿈을 하고 싶을 경우 게행문자 \n 를 입력합니다.

원하는 내용을 자유롭게 추가하면 됩니다.


5) 전송 실행 쉘 스크립트 작성

파일을 역시 아무거나 하나 만들어 줍니다.

역시 실행 가능하도록 755 권한을 줍니다.


$ vi sendmail.sh

$ chmod 755 sendmail.sh

---파일내용---

#!/bin/sh

sh check.sh > sys.log

ssmtp [전송할 메일주소] < sys.log

이렇게 입력하면 됩니다.

check.sh 를 실행한 결과를 sys.log에 저장을 하고 (쉘에 쭈욱 보여지던 내용)

ssmtp 명령어로 해당 메일 주소에 sys.log 내용을 보냅니다. (첨부 아님)


작성한 내용을 실행 해 봅니다.

$ ./sendmail.sh


아마 그냥 따라했으면 메일에 아무런 제목 없이 (제목없음) 의 내용으로 전송이 될텐데 

이를 예쁘게 제목까지 구성해서 전송하기 위해서는 약간의 꼼수가 필요합니다.


꼼수!

아까 작성한 메일 본문 내용에 삽입될 체크하는 파일을 열어봅니다.

$ vi check.sh

--파일내용--

#!/bin/sh 바로 하단에 아래 내용을 추가합니다.


echo "SUBJECT: 메일 제목"

#echo "FROM: 보내는메일주소" (없어도 됨)

echo "TO: 받는메일주소"


그러면 sys.log 에 아래 처럼 보여지게 됩니다.

$ vi sys.log

--파일내용--

SUBJECT: 메일 제목

TO: 받는메일주소

============Server Status============

......


6) 마무리

sendmail.sh 파일을 CRON에 등록해서 원하는 시간에 실행하도록 하면 반복적으로 알아서 메일을 보내게 됩니다.

check.sh 파일을 통해 sys.log가 생성되므로 경로 설정에 유의하시면 됩니다.


원리는 눈치 채셨을텐데 

실질적으로 전송하는 방법은 ssmtp 메일주소 < sys.log 입니다.

ssmtp -v 메일주소 < sys.log 를 해 보시면

sys.log에 입력된 내용을 위에서부터 차례대로 입력 해 나가게 되는데


수동으로 입력할 때 처럼

SUBJECT: 메일 제목 내용이 맨 위에 있으므로 자동으로 메일 제목이 설정되게 됩니다.

그 아래 내용들은 헤더가 없어 본문으로 취급되기 때문에

예쁘게 제목과 본문으로 서버의 상태를 보낼 수 있습니다.

+ Recent posts