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()
