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
'Development > Linux' 카테고리의 다른 글
[시스템 점검] Window/Linux system - CAPEX/OPEX (0) | 2023.06.23 |
---|---|
[Linux] 리눅스 기본 시스템 명령어 (0) | 2023.01.10 |
[Github] 기초 사용법 (0) | 2022.11.08 |
[SSH] 리눅스 서버 원격 접속 (0) | 2022.11.07 |
[리다이렉션] Linux File Descriptor (0) | 2022.11.07 |