티스토리 뷰

공장 (factory)/- Programming..

[Python] paramiko를 이용한 ssh접속 후 명령어 실행.

공부하는 나부랭이, 무중력고기 2020. 4. 9. 17:01

얼마 전부터 매일 서버점검 해야 하는 일이 생겼다. 운영중인 5개의 서버에 일일히 접속하여 각 서버에 여러 번 명령어를 실행 후 그 결과를 확인해야 하는 작업이다. 넘나 귀찮은 나머지 처음엔 bash shell script를 만들어서 쉘파일을 실행했다. 근데 그것도 서버가 5개이니, 각 서버에 파일을 만들어놓고 다섯 번을 접속해서 다섯 번 파일을 실행해야 했다. 오 넘나 귀찮은 것... 결국엔 파이썬으로 5개의 서버 정보를 불러와서 접속 후, 각 서버에 해당하는 명령어를 실행하여 그 결과를 이미지로 찍어내는 프로그램을 만들었다. 점검을 나만 하는 게 아니어서, pyinstaller 이용해서 만든 파이썬 프로그램을 exe로 뽑아내 배포하니까 같이 일하는 분들이 좋아하신다. 역시 파이썬이 최고.

 

아래는 ssh접속 후 명령어를 실행하는 간단 예제다.

 

 

1. paramiko 설치

python -m pip install paramiko

 

 

2. 소스단

import paramiko

def readTxtFile(fileNm):
    file = open(fileNm+".txt", "r", encoding="UTF-8")
    
    data = []
    while (1):
        line = file.readline()

        try:
            escape = line.index('\n')
        except:
            escape = len(line)
        if line:
            data.append(line[0:escape])
        else:
            break
    file.close()

    return data

def execCommands():
    cli = paramiko.SSHClient()
    cli.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    cli.connect("아이피", port=포트, username="아이디", password="패스워드")

    commandLines = readTxtFile("./commands/" + "파일명") # 메모장 파일에 적어놨던 명령어 텍스트 읽어옴
    print(commandLines)

    stdin, stdout, stderr = cli.exec_command(";".join(commandLines)) # 명령어 실행
    lines = stdout.readlines() # 실행한 명령어에 대한 결과 텍스트
    resultData = ''.join(lines)

    print(resultData) # 결과 확인
댓글
댓글쓰기 폼
Total
1,660,508
Today
746
Yesterday
831
«   2020/12   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
글 보관함