<시작>
shell 접속을 자동화하기 위해 Python에서 SSH를 접속하는 모듈을 필요로 함
해당 모듈이 paramiko이며 pycrypto에 대한 Dependency가 있어 먼저 pycrypto를 설치해야 함
(easy_install를 이용한 설치가 보통 쉬우나 win32에서는 pycrypto의 소스코드 컴파일에 따른 스크립트 수정이 필요하므로 각개격파로 설치)
(1) pycrypto 설치
-
정식 배포본은 소스코드로만 배포되는데 소스코드의 컴파일을 위해서는 Cygwin의 MingW나 VS.NET 2003을 필요로 하므로 미리 컴파일된 파일을 첨부했음
Pycrypto Win32 Binary for Python 2.4: pycrypto-2.0.1.win32-py2.4.zip
Pycrypto Win32 Binary for Python 2.5: pycrypto-2.0.1.win32-py2.5.zip각자 자신의 컴퓨터에 맞는 Python 버전을 선택하여 바이너리를 설치하도록 한다. (Windows Installer이므로 쉽게 설치 가능함)
(2) Paramiko 설치
-
정식 배포본 : paramiko-1.7.4.zip
다운로드 후 압축을 푼다.
시작 -> 실행 -> cmd (명령 프롬프트 열기)
아래처럼 커맨드 창이 뜨면 python setup.py install이라 입력하고 엔터
C:\paramiko-1.7.4> python setup.py install
(3) 테스트
-
IDLE나 Python Command에서 다음과 같이 입력한다.
>> import paramiko
-
아무런 에러없이 import가 진행되면 설치 완료
<Paramiko DEMO Test>
(1) 위의 demo파일을 다운로드 받아 특정 폴더에 압축을 푼다.
(2) demo.py 실행
C:\para_demo> python demo.py
<타 프로그램에 이용하기 위한 간단한 예제>
import paramiko
import sys
import socket
import os
# SSHClient 인스턴스 생성
client = paramiko.SSHClient()
# 저장된 Host 키값이 없으면 Policy에 따라 자동적으로 Host 키값 추가
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# SSH 접속 정보 입력
client.connect(hostname='ipaddress', username='ID', password='PW')
# 실행할 커맨드 입력
stdin, stdout, stderr = client.exec_command("ls -al")
# 접속 종료
client.close()
# SSH에서 결과로 뿌려주는 output 출력 (stdout)
for line in stdout:
print line.strip('\n')
주의) 이 프로그램은 cd나 pwd와 같은 명령어를 통한 폴더 이동 후 interactive한 path의 유지가 불가능함
둘 이상의 interactive한 명령어를 실행하려면 Thread를 통해 SSH의 Channel Session을 유지시켜줘야 함.
이는 위의 para_demo.zip의 interactive.py 코드의 windows_shell()이나 posix_shell() 참조
관련문서 : http://www.lag.net/pipermail/paramiko/2007-December/000582.html
팁) 확인 해 본 결과 아래식으로 몇가지의 명령어를 동시 실행 가능하다
(원래 터미널에서 ;로 여러 명령어를 한 줄에 쓸 수 있음)
cmd_list = ['cd target', 'ls -al', 'quelist']
# ;로 붙이기
req = ';'.join(cmd_list)
# 커맨드 실행
stdin, stdout, stderr = client.exec_command(req)