검색결과 리스트
Paramiko에 해당되는 글 1건
- 2019.01.02 Django를 이용한 프로그래밍 #6 (with paramiko)
글
Django를 이용한 프로그래밍 #6 (with paramiko)
Python Django
2019. 1. 2. 11:37
반응형
- paramiko를 활용하여 간단한 서버 사이드 호출 결과 화면 작성
- 화면에서 node IP, port, id, 패스워드를 입력하여 node에 접속 후 SSH를 통하여 명령어를 전송 후 화면에 표시
- 본 문서에서 사용한 명령어는 df -h 명령어를 사용하였음
- 보안관련 부분은 모두 제외 함 ( 패스워드 마킹, URL 삽입 해킹 등)
- 작성 화면
- 결과 화면
준비 사항 - paramiko 패키지 설치
- #pip install paramiko
- 설치 후 확인
- #pip show paramiko
- 위 내용 중 pip업그레이드는 본 문서와 별개이므로 패스 함 # 필요한 경우 업그레이드 해도 무방 함
- Template 작성을 위한 디렉토리 이동
- mainindex.html
- 사용자로부터 입력값을 전달 받는 화면
- menu1.html
- 입력된 값으로 서버에서 paramiko를 활용하여 node에 접속 후 명령어를 실행하여 결과를 표시
- mainindex.html
- mainindex.html 수정
- form 화면은 기본적인 Javascript를 사용하였으며, 필요한 경우 JSON 방식으로 변경하여도 무방
- {%csrf_token%} #Cross-site Request Forgery를 방지 하기 위함, Django에서 기본적으로 사용 됨
- CSRF는 사이트간 위변조에 의한 해킹 방법으로 간단한 설명은 https://okky.kr/article/406000 를 참조
- menu1.html 작성
- {% autoexcape off %} {{data}} {% endautoescape %} 는 표시되는 데이터(data)에 들어있는 HTML 태그를 활성화 하기 위해 사용되는 예약어
- {{data}}만 사용하는 경우와 {% autoexcape off %} {{data}} {% endautoescape %}로 사용되는 경우에 대해서는 직접 확인하여 숙지 필요
- views.py 수정
- paramiko 사용을 위해 import 시킴
- 1 라인 : import paramiko
- Template에서 action 실행시 받아줄 method를 작성
- 8 라인 ~ 55 라인 : def menu1(request): 에서 받아서 처리 됨
- 18 라인 ~ 22 라인 : 함수 내 지역변수 참조 오류를 피하기 위해 함수내 전역변수로 초기화
- 23 라인 ~ 27 라인 : request에서 post값을 받아오기 위해 처리
- 일반적으로 Django에서는 forms 개체를 사용하여 화면을 구성하며
- 이 경우 위 소스와는 틀린 방식으로 구현 됨
- forms 클래스를 구현하여 작동하는 방식은 추후 다른 문서에서 작성 예정
- request객체에는 POST를 비롯하여 GET 등 클라이언트로부터 넘어오는 값들이 들어 있음
- 오류 화면에서 넘어오는 값들을 모두 볼 수 있음
- POST값으로 넘어오는 IP, PORT, USERID, PASSWORD를 각 변수에 할당
- 34 라인 ~ 50 라인 : paramiko를 활용하여 Node에 SSH 통신 연결
- try: ... except: ... 를 활용하여 예외 처리 (예외 발생시 화면에 오류 표시)
- 40 라인 : df -h 명령어를 Node에서 실행
- 41 라인 : 실행된 결과는 stdout에 저장되므로 stdout값을 data에 저장, 에러시 stderr에 저장 됨
- 43 라인 ~ 44 라인 : 결과는 stdout에 \r\n 값으로 포함되므로 for 문장을 활용하여 1 라인씩 읽어들여 HTML태그(<P>...</P>)로 씌움
- 55 라인 : 최종 작성된 context를 template(menu1.html)에 포함시켜 화면으로 전송
urls.py의 수정 - 사용자의 action에서 넘어오는 값을 받아 처리하도록 urls.py를 수정
- action에 /menu1로 구성되어 있으므로
- urls.py에 /menu1에 대한 액션시 받아들이는 함수 매핑
- 6 라인 : menu1로 URL에서 넘어오는 경우 views.menu1 함수를 호출 하도록 설정
- 결과 확인
- 목표 화면이 나오는지 확인
- 추가 목표
- 다른 명령어를 수행하여 결과가 나오는지 확인
- 화면상에서 명령어를 입력받아 처리 후 화면에 표시되도록 설정