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