본문 바로가기
IT

[python]파이썬 ssh 명령어 수행을 위한 paramiko 패키지 사용 방법

by 쪼이빠빠 2023. 4. 13.
728x90
반응형

paramiko

파이썬을 사용하여 리눅스 서버에 ssh명령을 수행하기 위해서는 paramiko 패키지를 사용해야 한다.
아래 파이썬 코드는 리눅스 서버에 ssh명령을 내리기 위해 paramiko 패키지를 import하고 ssh 객체를 생성, 그리고 ssh 명령을 수행하는 exec_command 함수를 수행하는 함수이다.

exec_command 명령 수행중 발생하는 Exception 처리도 적어두었다.

 

ssh 명령 수행 함수 execute

import paramiko

def execute(vIp,vPort,vUsername,vPassword,vCommand):
    try:
        print("========== start ssh command : "+vCommand)
        cli = paramiko.SSHClient()
        cli.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        cli.connect(vIp, port=vPort, username=vUsername, password=vPassword)

        stdin, stdout, stderr = cli.exec_command(vCommand+';echo $?')  # 명령어 실행
        print('stdout:',stdout.read().decode())
        print('stderr:',stderr.read().decode())
        lines = stdout.readlines()  # 실행한 명령어에 대한 결과 텍스트

        resultData = ''.join(lines)

    except paramiko.AuthenticationException:
        print("인증 실패. 사용자 이름 또는 패스워드를 확인하세요.")
        return 'error'
    except paramiko.SSHException as sshException:
        print(f"SSH 연결에 문제가 발생했습니다: {sshException}")
        return 'error'
    except paramiko.BadHostKeyException as badHostKeyException:
        print(f"서버의 호스트 키를 확인할 수 없습니다: {badHostKeyException}")
    except Exception as e:
        print(f"예기치 않은 오류가 발생했습니다: {e}")
    finally:
        cli.close()

    return resultData

함수 수행 예제

result = execute('0.0.0.0','22','test','test','df'):

========== start ssh command : df
stdout: Filesystem                1K-blocks     Used Available Use% Mounted on
/dev/vda1                  31445996 10536916  20909080  34% /
devtmpfs                    3982080        0   3982080   0% /dev

stderr:

result = execute('0.0.0.0','22','test','test','ttt'):

========== start ssh command : ttt
stdout: 127

stderr: bash: ttt: command not found

 

stdin, stdout, stderr 변수 역할 설명

- stdin: 원격 명령 실행에 필요한 입력을 보낼 수 있는 입력 스트림입니다. 여기에 데이터를 작성하면 원격 프로세스의 표준 입력으로 전달됩니다.
- stdout: 원격 명령 실행의 결과를 읽을 수 있는 출력 스트림입니다. 원격 프로세스의 표준 출력이 여기로 전달됩니다.
- stderr: 원격 명령 실행 중 발생한 에러 출력을 읽을 수 있는 오류 스트림입니다. 원격 프로세스의 표준 오류가 여기로 전달됩니다.
stderr를 사용하여 원격 명령 실행 중 발생한 에러를 확인할 수 있습니다. 이를 통해 문제가 발생한 원인을 파악하고 해결할 수 있습니다. 예를 들어, 원격 명령 실행 중 발생한 에러를 읽고 출력하려면 다음과 같이 코드를 작성할 수 있습니다.

반응형

댓글