YAMAGUCHI::weblog

噛み付き地蔵に憧れて、この神の世界にやってきました。マドンナみたいな男の子、コッペです。

sshモジュールでSFTPの操作

はじめに

こんにちは、Python界の情弱です。San Francisco出張に来て2週間弱が経ちますが、明日の夕方の便で日本に帰ります。アメリカの大味な食事も2週間すれば目新しさもなくなって、そろそろ東南アジア系の料理が食べたくなったりしてたので、帰ったら日本の繊細な味付けの食事を堪能したいと思います。
そんなことはどうでもよくて、SSHでの操作に続いてSFTPでファイルを置いたり取ってきたりってのも簡単にできたので、忘れないうちにメモ。

参照

ライブラリとかのリンクはこっちのエントリに貼りました。

SFTPで操作する一例

基本的にSFTPのコマンドがそのまま関数になってるので楽。こんな感じで使うっていうサンプルを備忘録として載せておく。
本家のサンプルもめちゃくちゃわかりやすい。

import ssh
username = 'spam'
hostname = 'egg.example.com'
password = 'password'
port = 22
private_key_file = '/home/hoge/.ssh/dsa_private_key'

# 例えばDSA鍵だったとして
key = ssh.DSSKey.from_private_key_file(private_key_file)

# SFTPサーバに接続
t = ssh.Transport((hostname, port))
t.connect(username=username, pkey=key)
sftp = ssh.SFTPClient.from_transport(t)

# デフォルトルートから1階層下のディレクトリ内で次の操作
# 1. 拡張子がtxtならlogに変更
# 2. それ以外はダウンロード
dirlist = sftp.listdir('.')
for d in dirlist:
  files = sftp.listdir(d)
  for f in files:
    if f[-4:] == ".txt":
        sftp.rename(f, f[:-4]+".log")
    else:
        sftp.get(f)

っつーかParamikoもそうだけど、pycryptも含めて標準ライブラリに入れて欲しいわー。