python 으로 웹콘솔(같은) 프로그램 만들고 싶은데요 어떤식으로 구현해야할까요?

nulpum98의 이미지

펄을 좀 공부하고 업무에 약간 활용하다가 파이썬에 심취해보기로 하고 공부하는중입니다.

재미있게 공부하고 싶고 이왕이면 업무를 편하게 하는데에도 활용하고 싶은생각인데요.

웹어플리케이션 로그을 다운로드받아 TEXT 에디터에 불러와 보여주는 간단한 기능의 스크립트들을 만들어 써먹고 있습니다.

문득 떠오른게 유닉스 콘솔로 Application 서버를 Stop하고 재기동하는 작업들을 웹하면의 버튼으로 하고 싶은데요(웹로직의 웹콘솔같은)

서버 프로세스가 떠 있는지도 모니터 되는 그런 시스템 운영용 웹화면...

파이썬으로 그런거 만들고 싶은데 인터넷 검색을 해보면 장고라는 웹프레임워크가 있다고 하네요.

진짜 궁금한거는 제가 제 PC에 장고로 웹하면을 띄워서 버튼 클릭으로 원격 서버를 재기동할 수 있을까요?(원격서버의 쉘 스크립트를 실행하고 결과도 Feedback 받는..)

있을거 같은데 어떤식으로 구현하면 될런지 의견을 듣고 싶습니다.

이응준의 이미지

HTTP 요청을 받아 해석하여 알맞은 쉘 명령을 실행하고(subprocess 모듈의 Popen 클래스 등을 이용) 그 결과를 다시 HTTP 응답으로 돌려주는 애플리케이션을 작성하시면 됩니다.

장고와 같은 웹프레임워크를 사용하시면 위의 작업 중 HTTP 요청을 받아서 해석하는 부분과 HTTP 응답을 돌려주는 부분을 더 쉽게 작성하실 수 있을 것입니다.

문제가 하나 있을 수 있는데, 스크립트 실행을 위해 필요한 권한이 웹서버의 권한을 넘는다면 당연하게도 Permission denied 에러를 만나게 될 것입니다.

이 문제를 피하기 위해 웹서버가 super user 권한을 갖게 하면, 그 다음에는 보안 문제가 신경쓰이게 되겠지요.

smnra의 이미지

약간의 부연설명을 추가하도록 하겠습니다. 조금이나마 도움이 되셨으면 합니다.

저는 주로 NT서버를 관리하기 때문에 외부에서 터미널 작업 시 번거로움이 많았습니다.
특히나, 밤에 자다가 장애문자나 연락을 받았을 때 컴퓨터를 키기도 번거롭고 해서 핸드폰으로 웬만한 작업이 가능하도록 웹을 통한 제어를 만들게 되었습니다.

Linux는 NT보다 더 많은 CLI명령어들을 지원하므로 좀 더 편하게 작업을 할 수 있습니다.
우선 저는 Python으로 기본적인 작업을 하는 스크립트를 만들어 테스트 한 뒤, 해당 스크립트를 Django를 통하여 출력하였습니다.

Python의 os.popen, subprocess.Popen 등을 사용하여 CLI명령어들을 실행한 뒤 원하는 결과값을 출력하여 보여주면 됩니다.

응준님이 말씀하신 것처럼 이런 경우 원격서버관리를 위해 해당 스크립트를 실행하는 서버에서 그에 상응하는 권한이 필요합니다. NT의 경우 CMDKEY라는 명령어를 이용하여 권한 제어가 가능합니다. (해당 명령어에서 /u와 같이 원격 로그인 자체를 지원하면 더 간단하게 해결이 됩니다)

Linux는 제가 다양한 방법을 알지는 못하지만, SSH-Key(RSA/DES)를 통한 서버인증을 통하여 미리 인증을 해두면,
다음과 같이 간단하게 원격서버를 관리하실 수 있습니다.

예) 원격서버 192.168.0.2의 프로세스 정보를 가져오는 경우
tmp = os.Popen('ssh 192.168.0.2 ps -ef')
'해당 tmp의 내용을 Django의 HttpResponse로 출력

신규버전의 python에서는 subprocess를 통한 제어를 권장(?)하는 것 같습니다만, 어느 것을 써도 원하시는 기능은 구현가능하실 겁니다.

참고로 NHN의 오픈프로젝트인 sysmon도 참고하시면 더욱 도움이 되실듯 합니다.
http://dev.naver.com/projects/sysmon/

그럼 좋은 하루 되세요~

nulpum98의 이미지

두분 모두 갑사합니다.
일이 바빠서 실제 시작은 못하고 있는데, 많은 도움이 될것 같습니다.