PythonでSSH接続とSFTPファイル転送

Windows XPの環境で、PythonでのSSH接続とファイルのSFTP転送実験をして、うまくいったのでメモしておく。

pyexpectはWindows XPでは使えない

Googleで検索して、pyexpectモジュールを使えばよいとわかったので easy_installでインストールしたのだが、下記のエラーメッセージでWindowsでは使えないことが判明。

A critical module was not found. Probably this operating system does not
support it. Pexpect is intended for UNIX-like operating systems.

paramikoをインストール

別のモジュールを探したら、paramikoを発見したのでインストール。

> easy_install paramiko

ところが、pramikoのインストールは終了し、paramikoに必要なpycryptoを自動でインストールが走ったのだが、次のエラーが発生。

error: Setup script exited with error: Unable to find vcvarsall.bat

このエラーは、Visual C++ 2008 Express Edition with SP1をインストールすれば良いので、ここからインストールした。

warningメッセージがポツポツと発生したが、なんとか無事にインストール完了。

Installed c:\python27\lib\site-packages\pycrypto-2.3-py2.7-win32.egg
Finished processing dependencies for paramiko

SSH接続のサンプルスクリプト

# coding:utf-8

import paramiko

HOST = 'remote_hostname'
USER = 'your_userid'
PSWD = 'your_password'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, username=USER, password=PSWD)

stdin, stdout, stderr = ssh.exec_command('ls -l')

for line in stdout:
    print line.strip('\n')

ssh.close()

SFTP転送のサンプルスクリプト

# coding:utf-8

import paramiko

HOST = 'remote_hostname'
USER = 'your_userid'
PSWD = 'your_password'

LOCAL_PATH  = r"c:\temp\test.txt"
REMOTE_PATH = "/path/to/test.txt" 

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, username=USER, password=PSWD)

sftp = ssh.open_sftp()
sftp.put(LOCAL_PATH, REMOTE_PATH)
sftp.get(REMOTE_PATH, LOCAL_PATH)
sftp.close()

ssh.close()

参考にしたサイト

Python

Posted by skw