Python/Python for Linux

[Python] paramiko와 timedelta를 조합하여 리눅스 로그 핸들링

Pydole 2018. 5. 24. 22:48

 

* 테스트 환경이기 때문에 root 접속 보안은 배제하고 포스팅

* seculog를 샘플로 하였지만 날짜 형식은 동일하기 때문에 다양한 리눅스 로그에 활용이 가능

 


 

 

# securelog 파일에서 특정일을 선택해서 출력이 가능. (로그가 없어서 4일전으로 출력)

 

 

day_ago = datetime.datetime.now() - datetime.timedelta(days=4) → 1 : 전일, 2 : 2일전

 

 

month = day_ago.strftime('%b') → 월 날짜 형식( 5월 : May ). log[0][2:]와 매칭

 

 

day = day_ago.strftime('%d') → 일 날짜 형식( 00 ). log[1]와 매칭

 

 

import paramiko
import datetime

day_ago = datetime.datetime.now() - datetime.timedelta(days=4)
month = day_ago.strftime('%b')
day = day_ago.strftime('%d')

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('host', username='', password='')

stdin, stdout, stderr = ssh.exec_command('cat /var/log/secure')
stdin.close()

for line in stdout.read().splitlines():
	log = str(line).split(' ')
	if log[0][2:] == month and log[1] == day:
		print(log[0][2:],log[1], ' '.join(log[2:]))

 

 

 

 

# 출력로그를 파일로 저장. (자동화가 가능하다면 일 단위 백업을 구현)

 

for line in stdout.read().splitlines():
    log = str(line).split(' ')
    if log[0][2:] == month and log[1] == day:
        with open(log[0][2:]+'_'+log[1]+'_Seculog.txt', 'a') as f:
            f.write(log[0][2:]+' '+log[1]+' '+' '.join(log[2:])+'\n')