libssh2 の Python バインディングを作成しました。 Libssh2 は、SSH2 プロトコルを実装するクライアント側ライブラリです。
import socket
import libssh2
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('exmaple.com', 22))
session = libssh2.Session()
session.startup(sock)
session.userauth_password('john', '******')
channel = session.channel()
channel.execute('ls -l')
print channel.read(1024)
試したことはありませんが、この pysftp モジュールが役立つ可能性があり、これは paramiko を使用します。私はすべてがクライアント側であると信じています.
興味深いコマンドはおそらく .execute()
です リモートマシンで任意のコマンドを実行します。 (このモジュールには .get()
も含まれています そして .put
その FTP キャラクターをほのめかしているメソッド)。
更新:
最初にリンクしたブログ投稿が利用できなくなった後、回答を書き直しました。この回答の古いバージョンを参照するコメントの一部は、今では奇妙に見えます。
上記のように、Paramiko を使用して自分でコーディングできます。または、質問したすべてのことを実行するための Python アプリケーションである Fabric を調べることもできます。
<ブロック引用>Fabric は、SSH プロトコルを介してアプリケーションの展開やシステム管理タスクの実行を合理化するために設計された Python ライブラリおよびコマンドライン ツールです。任意のシェルコマンドを (通常のログインユーザーとして、または sudo を介して) 実行したり、ファイルをアップロードおよびダウンロードしたりするためのツールを提供します。
これはあなたのニーズに合っていると思います。また、大きなライブラリではなく、クライアントへのインストールが必要な paramiko と pycrypt への依存関係がありますが、サーバーへのインストールは必要ありません。
アプリはここにありました。ここで見つけることができます。
* The official, canonical repository is git.fabfile.org
* The official Github mirror is GitHub/bitprophet/fabric
過去 6 か月で変更されているため注意が必要ですが、いくつかの優れた記事があります。
Fabric を使用した Django のデプロイ
現代の Python ハッカーのツール:Virtualenv、Fabric、Pip
Fabric と Virtualenv によるシンプルで簡単な導入
後で:Fabric はインストールに paramiko を必要としなくなりました:
$ pip install fabric
Downloading/unpacking fabric
Downloading Fabric-1.4.2.tar.gz (182Kb): 182Kb downloaded
Running setup.py egg_info for package fabric
warning: no previously-included files matching '*' found under directory 'docs/_build'
warning: no files found matching 'fabfile.py'
Downloading/unpacking ssh>=1.7.14 (from fabric)
Downloading ssh-1.7.14.tar.gz (794Kb): 794Kb downloaded
Running setup.py egg_info for package ssh
Downloading/unpacking pycrypto>=2.1,!=2.4 (from ssh>=1.7.14->fabric)
Downloading pycrypto-2.6.tar.gz (443Kb): 443Kb downloaded
Running setup.py egg_info for package pycrypto
Installing collected packages: fabric, ssh, pycrypto
Running setup.py install for fabric
warning: no previously-included files matching '*' found under directory 'docs/_build'
warning: no files found matching 'fabfile.py'
Installing fab script to /home/hbrown/.virtualenvs/fabric-test/bin
Running setup.py install for ssh
Running setup.py install for pycrypto
...
Successfully installed fabric ssh pycrypto
Cleaning up...
ただし、これはほとんど表面的なものです。ssh は paramiko のフォークであり、両方のライブラリのメンテナーは同じです (Jeff Forcier は Fabric の作成者でもあります)。メンテナーは、paramiko と ssh を paramiko という名前で再統合する予定です。 (この修正は pbanka 経由です。)
余分なモジュールを避けたい場合は、subprocess モジュールを使用して実行できます
ssh [host] [command]
出力をキャプチャします。
次のようなものを試してください:
process = subprocess.Popen("ssh example.com ls", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output,stderr = process.communicate()
status = process.poll()
print output
ユーザー名とパスワードを処理するには、サブプロセスを使用して ssh プロセスとやり取りするか、サーバーに公開鍵をインストールしてパスワード プロンプトを回避することができます。