Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでSSH経由でリモートコマンドを実行する方法【paramikoの使い方を解説】

PythonでSSH接続を行うには?

PythonからSSHを使ってリモートサーバーに接続し、コマンドを実行したい場合、最もシンプルで広く使われている方法がparamikoライブラリを利用することです。paramikoはSSH2プロトコルを純粋なPythonで実装したライブラリで、鍵認証やパスワード認証など、さまざまな接続方式に対応しています。

paramikoのインストール

pipコマンドを使って、以下のように簡単にインストールできます。

$ pip install paramiko

事前準備:SSHキーの設定

paramikoを使用する前に、接続元(ホスト)マシン上でSSHキーが正しく設定されていることを確認してください。また、Pythonスクリプトを実行する際に、そのキーファイルへアクセスできる必要があります。

SSHキーの作成方法については、Atlassianが公開している「Creating SSH keys」などのドキュメントを参考にするとよいでしょう。

SSH接続とコマンド実行のサンプルコード

準備が整ったら、次のコードでリモートサーバーへSSH接続し、コマンドを実行できます。

from paramiko import SSHClient

ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('user@server:path')
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('ls')
print(ssh_stdout) # lsコマンドの出力結果を表示

コードの解説

  • load_system_host_keys():ローカルマシンのknown_hostsファイルを読み込み、ホスト鍵の検証を有効にします。
  • connect():指定したユーザー名・サーバーに対してSSH接続を確立します。
  • exec_command():接続先サーバーでサポートされている任意のコマンドを実行します。

上記のコードを実行すると、リモートサーバー上のディレクトリ一覧(lsコマンドの結果)が出力されます。exec_commandは標準入力・標準出力・標準エラー出力の3つのストリームを返すため、コマンドの実行結果やエラーメッセージも柔軟に取得できます。

まとめ

paramikoを使えば、Pythonスクリプトから安全かつ手軽にSSH接続を行い、リモートサーバー上で任意のコマンドを実行できます。サーバー運用の自動化やバッチ処理など、さまざまな場面で活用できるので、ぜひ試してみてください。

  1. Matplotlibで異なるスケールの軸を使ってプロットする方法

    Matplotlibでは、twinx()メソッドを使ってX軸を共有する2つのY軸(双子軸)を作成することで、異なるスケールのデータを同じグラフ上にプロットできます。以下に、その具体的な手順とサンプルコードを紹介します。実装手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して、t、data1、data2 のデータポイントを作成します。plt.subplots()で図と最初の軸 ax1 を作成します。色を格納する変数を初期化します。1つ目の軸にX軸・Y軸のラベルを設定します。plot()メソッドで t と data1 をプロットします。tick_p

  2. PythonのBokehで画像を操作・表示する方法

    Pythonの可視化ライブラリBokehで画像を扱うには、image_url()メソッドを使い、画像URLのリストを渡すのが基本です。このメソッドを使うことで、ローカルやWeb上にある画像をプロット領域内に簡単に配置できます。実装の手順output_file()でデフォルトの出力先を設定し、show()を呼び出したときに結果がHTMLファイルとして保存されるようにします。figure()でプロット用の新しいFigure(図)オブジェクトを作成します。image_url()メソッドで、指定したURLから読み込んだ画像を描画します。show()を呼び出して、Bokehオブジェクトやアプリケーション