GNU/Linux >> Linux の 問題 >  >> Linux

Pythonを使用してSSHする最も簡単な方法は何ですか?

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 プロセスとやり取りするか、サーバーに公開鍵をインストールしてパスワード プロンプトを回避することができます。


Linux
  1. SSH速度テストを確認する簡単な方法

  2. シェルを使用してinitシステムを検出しますか?

  3. Ssh –遅すぎるSshログインを高速化する方法は?

  1. Python 3 Appindicator3:依存関係とは何ですか?

  2. Python/Linux の方法で 2 つの画像を比較する

  3. sedにタブを挿入する正しい方法は何ですか?

  1. Linux マクロ access_ok() を使用するポイントは何ですか?

  2. `sh` と `source` の使用の違いは何ですか?

  3. Linuxにjdkをインストールする正しい方法は何ですか