• 티스토리 홈
  • 프로필사진
    홀쑥
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
홀쑥
  • 프로필사진
    홀쑥
    • 분류 전체보기 (57)
      • Language & Framework (14)
        • Java (1)
        • Python (13)
      • DataBase (4)
        • NoSQL (1)
        • RDBMS (3)
      • Big Data & Ecosystem (9)
        • Hadoop (5)
        • Hive (2)
        • Sqoop (1)
        • Zeppelin (1)
      • Data Engineering (1)
        • Airflow (1)
      • Cloud & DevOps (1)
        • AWS (0)
        • GCP (1)
      • Monitoring & Logging (2)
        • ElasticSearch (2)
      • Infrastructure (12)
        • OS (12)
        • Docker (0)
        • Kubernetes (0)
      • Algorithm & CS (7)
        • 백준 알고리즘 (6)
      • Troubleshooting (5)
        • 오류 모음 (5)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Python] Python SSH Paramiko
        2022년 04월 12일
        • 홀쑥
        • 작성자
        • 2022.04.12.:58

        Paramiko

        Welcome to Paramiko!

        Paramiko는 클라이언트와 서버 기능을 모두 제공하는 SSH 프로토콜의 순수 Python 구현체(C와 Rust 확장을 사용하지만 암호화를 위해 사용)
        일반적으로 원격 쉘 명령 실행과 파일전송과 같은 일반적인 클라이언트에 사용
        Python 2.7 이상, 3.4 이상 사용할 수 있음

        설치

        python -m pip install paramiko

        사용

        연결

        import paramiko
        
        client = paramiko.SSHClient()
        username = 'username'
        password = 'password'
        
        user_info_dict = {
            'username' : username,
            'password' : password,
        }
        
        client.connect('127.0.0.1', **user_info_dict)
        
        ~~~
        
        client.close()

        Host Key

        ssh 접근 시 서버 컴퓨터가 내가 알던 컴퓨터가 맞는 지 확인하는 과정에 필요한 SSH Host Key를 저장한다.

        ssh를 사용해봤다면 한번 쯤 공백 엔터, 'y', 'yes'를 입력했던 경험이 있을 것이다.

        paramiko에선

        SSHClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        를 사용하여 Host key를 저장하게 할 수 있다.(기본값은 RejectPolicy)

        import paramiko
        
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        server_info_dict = {
            'username' : username, # ID (str)
            'password' : password, # PW (str)
            'port'       : port,     # PORT (int)
            'hostname' : hostname  # IP (str)
        }
        
        client.connect(**server_info_dict)

        함수

        exec_command(명령) : 서버에서 명령을 실행, 명령 실행이 완료되면 채널이 닫히고 재사용할 수 없음

        
        ~
        
        stdin, stdout, stderr =  client.exec_command(command) 
        data = stdout.readlines()
        

        exec_command로 sudo 사용

        
        ~
        
        stdin, stdout, stderr =  client.exec_command(command)  # sudo 가 포함된 명령어
        stdin.write(f'{password}\n')
        stdin.flush() # write 후 flush를 해야 동작함
        
        data = stdout.read()
        

        하지만 내가 사용하던 경우 sudo 명령어로 실행시킬 수 없는 상황이였기에 invoke_shell을 사용하여
        sudo su - 로 유저 변경 후 명령어를 실행시켰다.

        
        def wait_stream(chan):
            time.sleep(1)
            out = err = ''
        
            while chan.recv_ready():
                out += chan.recv(1024)
                while chan.recv_stderr_ready():
                    err += chan.recv_stderr(1024)
        
            return out, err
        
        ~
        
        channel =  client.invoke_shell()
        channel.send('sudo su -\n')
        out, err = wait_stream(channel)
        
        channel.send(f'{password}\n')
        out, err = wait_stream(channel)
        
        channel.send(f'{command}')
        out, err = wait_stream(channel)
        
        
        data = out.splitlines()
        

        참고자료

        Welcome to Paramiko!
        Python Paramiko
        lahuman.github.io

        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바