728x90
반응형

3초 이내로 timeout

timeout = 3
socket.setdefaulttimeout(timeout)

 

현재 스크립트 파일이 실행되는 상태 파악

- main 함수 실행

if __name__ == "__main__":
	main()

 

strftime(): 날짜 형식을 변환하는 메서드

time = datetime.datetime.now()
strtime = self.time.strftime('%Y-%m-%d %H:%M:%S')
print("origin-time:", time, "/ string-time:", strtime)
origin-time: 2022-11-09 10:47:48.387960 / string-time: 2022-11-09 10:47:48

server information 빈 array 만들고,

server result success/fail dictionary 구조

import paramiko
import getpass
import socket
import datetime
import os
import sys

timeout = 3
socket.setdefaulttimeout(timeout)

class maintenance:
    def __init__(self, ser_info):
        self.port = 22
        self.ser = ser_info
        self.time = datetime.datetime.now()
        self.systime = self.time.strftime('%y%m%d_%H%M%S')
        print(self.systime)
        self.ssh_connection()
        
    def ssh_connection(self):
        try:
            # ssh server connected class - present pc: client
            ssh = paramiko.SSHClient()
            # ssh session key rule: paramiko.AutoAddPolicy()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            
            server = '192.168.5.132'
            user = input("Username: ")
            pwd = getpass.getpass("Password: ")
            
            # ssh server connect
            ssh.connect(server, port=22, username=user, password=pwd)
            print('--------------- SSH Connected ---------------\n')
            
            # ssh route directory/file list check
            stdin, stdout, stderr = ssh.exec_command('df -h')
            print(''.join(stdout.readlines()))
            
            self.system_check(server, user, pwd)
            
            ssh.close()
        except Exception as err:
            print(err)
    
    def system_check(self, server, user, pwd):
        
        # if server == '192.168.5.132':
        #     file_name = 'server_#1'
        try:
            ser_result_success = {}
            ser_result_fail = {}
            msg_text = ''
            
            print('--------------- ping test ---------------')
            # -n: number of packet transmissions(1)
            response = os.system("ping -n 1 " + server)
            if response == 0:
                Netstatus = "Network Active"
            else:
                Netstatus = "Network Error"
            file_name = self.save_results(server, Netstatus)
            
        except Exception as err:
            print(err)

    def save_results(self, server, ping_result):
        try:
            # realpath, abspath
            BASE_DIR = os.path.dirname(os.path.abspath(__file__))
            w_file_name = f'{self.systime}_{server}_result.log'
            print(BASE_DIR)
            with open(os.path.join(BASE_DIR, w_file_name), 'w') as f:
                # for k, v in ping_result.items():
                doc = f"{ping_result}"
                f.write(doc)
                
        except Exception as err:
            print(err)
            
    # def send_mail(self, server, ):
    #     return 0
def main():
    
    # system arguments value (default 1)
    print(sys.argv, len(sys.argv))
    
    # c:/Users/user/Desktop/sehee/system/git/sshtest.py
    ser_check_file = sys.argv[0]
    # []: Array / {}: Dictionary / (): Tuple    
    ser_info = []

    with open(ser_check_file, 'r') as file:
        lines = file.read().splitlines()
        for line in lines:
            line = line.split(",")
            ser_info.append(line)
    
    # maintenance(ser_info).ssh_connection()
    maintenance(ser_info)

# main script run
if __name__ == "__main__":
    main()

 

실행 명령어 exec_command를 입력하게 되면, 값을 tuple 형식으로 세 개를 받아옴

stdin, stdout, stderr

 

메일 전송 프로토콜

SMTP를 사용하기 위해 필요한 smtplib 모듈 import

MIME 클래스: 이메일과 함께 전송할 파일을 텍스트 형식으로 변환해주는 역할

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

 

Google 계정 관리 > 보안 > 2단계 인증 > 비밀번호 입력(로그인) > 2단계 인증 후

앱 비밀번호 > 비밀번호 입력(로그인) > 앱 선택: 메일 / 기기 선택: Windows 컴퓨터 > 생성

파일 생성하여 첨부

attachment = open(BASE_DIR+'\\'+file_name, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= "+file_name)
msg.attach(part)

 

728x90
728x90

+ Recent posts