3262349 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.11
2023.10
2023.09
2023.08
2023.07

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2008.06.19
XML
カテゴリ:Python
はじめてのPythonネットワークプログラミングを読み始めた。中身確認しないで買っちゃったのだけど、クライアントサイドのネットワークを使ったプログラミングということで、内容は下のようなものだった。ちゃんと見てから買えってw



第1章 Python のおさらい
第2章 FTP と Telnet
第3章 メールの作成と送信(連絡網スクリプト1)
第4章 「SQLite」によるデータベース (連絡網スクリプト 2)
第5章 「Tkinter」を用いた GUI フロントエンドの作成
第6章 「Google News」の元記事を集めてくる
第7章 XMLの取り扱いと簡易RSSリーダー

といったものだった。ネットワークプログラミングという題名から、もっと下位の層のネットワークとか、Twisted を使ったようなものとか想像していたが、中身をみたら違った。書籍の紹介ページにも「クライアント側のプログラミングが簡単に習得できる!」ってちゃんと書いてあったが見ないで脊髄反射で買ってしまった。

まあ、買ってしまった以上は活用しないともったいないので、見ていくことにする。第1章は、普通に「Python のおさらい」そのままだけど、断片的なので、初めて Python を触る人は別に一冊読んでからの方がいい。パラパラと流し読み。第2章の「FTPとTelnet」だが、やっぱり、インターネットごしにそういうことはあれなので、SSH でやりたいなと。そうすると、書籍にはないものを使って、Paramiko か、PySSH あたりか。PySSH は # Updates in CVS 2006-04-12 でメンテナンスが止まっているようなので、Paramiko を使うことにする。ちなみに Java にも移植されて Jaramiko というのがある。Paramiko は Pure Python なので、速度的にどうかなぁとか後で調べる。

ちなみに古いバージョンは、セキュリティホール情報<2008/03/05>

paramikoは、RandomPoolクラスを使って生成されたパスワードと関連があるエラーなどが原因でセキュリティホールが存在する。この問題が悪用されると、リモートの攻撃者に機密情報を奪取される可能性がある。

なので、1.6.4 はアウト。最新のバージョンは paramiko 1.7.3。easy_install paramiko でインストールできる。

使い方は、まじめにやると面倒なので、COMMAND LINE WARRIORS Zeth さんの SFTP in Python: Really Simple SSHSFTP in Python: Paramiko を参考にする。このために、ssh.txt をダウンロードして ssh.py と名前を付け替えてから site-packages に放り込んでおく。そうすれば、下のように簡単に使える。なんて楽なんだ。

import ssh

s = ssh.Connection('example.com')
s.put('hello.txt')
s.get('goodbye.txt')
s.execute('du -h --max-depth=0')
s.close()


ただし、os.environ['LOGNAME'] を参照してログイン名を取得しているので、環境変数として指定しておくか、

s = ssh.Connection('hostname or IP address', username='myaccount', password='mypassword')

のように明示的に指定する。private_key でプライベートキーのファイルを指定することもできる。

Connect で接続、put でファイルを送信、get でファイルを受信、execute でコマンドを実行。close で接続を閉じる。これだけ覚えれば使える。

ユーザー名は、username = os.environ['LOGNAME'] なので指定しなければ環境変数 LOGNAME の値が使われる。パスワードが指定されていないときは、'~/.ssh/id_rsa' か '~/.ssh/id_dsa' をプライベートキーファイルとして自動的に使う。どちらもなくて、パスワードもしていされていない場合はエラー。

複数のサーバーで同じコマンドを実行したければ Python ssh paramiko run command at every server のようなのもありだな(これは paramiko を生で使っていて ssh.py は使っていない例)。

paramiko/SSH/ how to get a remote host_key のあたりも参照。


とりあえず、ここまで。


なかのひと





お気に入りの記事を「いいね!」で応援しよう

Last updated  2008.06.20 03:50:09
コメント(0) | コメントを書く



© Rakuten Group, Inc.