はじめに
こんにちは、Python界の情弱です。最近はみなさんPythonでWebサービスをゴリゴリと作っちゃっててとてもかっこいいなーと思いつつ、コソコソとツールを作る毎日を過ごしています。同じような構成のマシンがたくさんあったときに、いちいちSSHログインして作業するの面倒だなーとか思ってて、かといって、自分でsocket通信のプログラム書くのはきついのでライブラリ使うことにしました。
Paramikoに関する記事ばかり出てくるんですが、id:mopemope はじめsshモジュールがいいよ、っていう情報をもらってしばらく遊んでみたらこれが便利だったので、忘れないうちにまとめときます。
参照
- ssh 1.7.11 : Python Package Index
- Readmeに書いてあるけれどもsshはParamikoのpure-python実装です。
- bitprophet/ssh · GitHub
- ドキュメントはないので、demoを見るなりpydoc作るなりして下さい。コメントがdoxygen形式でも書いてあります。
ログインしてみる
ただのパスワードログインの場合
import ssh hostname = 'example.com' username = 'spam' password = 'egg' port = 10022 client = ssh.SSHClient() client.load_system_host_keys() client.connect(hostname, username=username, password=password, port=port) stdin, stdout, stderr = client.exec_command('ls -l') for l in stdout.read().split('\n'): print l
公開鍵認証の場合
import ssh hostname = 'example.com' username = 'spam' password = 'egg' port = 10022 private_key_file = '/home/ham/.ssh/id_rsa' # pattern 1 client = ssh.SSHClient() client.load_system_host_keys() client.connect(hostname, username=username, password=password, port=port, key_file=private_key_file)
または秘密鍵を別途復号化しておいてもよい。
# pattern 2 key_rsa = ssh.RSAKey.from_private_key_file(private_key_file, password) # RSAの場合 key_dsa = ssh.DSSKey.from_private_key_file(private_key_file, password) # DSAの場合 client = ssh.SSHClient() client.load_system_host_keys() client.connect(hostname, username=username, port=port, pkey=key_xxx) # key_xxxは上の2つのキーのどっちでも大丈夫
とりあえずこれでログイン先にあるスクリプトを起動するくらいは出来るようになったね。よかった。