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接続を行い、リモートサーバー上で任意のコマンドを実行できます。サーバー運用の自動化やバッチ処理など、さまざまな場面で活用できるので、ぜひ試してみてください。
-
Matplotlibで異なるスケールの軸を使ってプロットする方法
Matplotlibでは、twinx()メソッドを使ってX軸を共有する2つのY軸(双子軸)を作成することで、異なるスケールのデータを同じグラフ上にプロットできます。以下に、その具体的な手順とサンプルコードを紹介します。実装手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して、t、data1、data2 のデータポイントを作成します。plt.subplots()で図と最初の軸 ax1 を作成します。色を格納する変数を初期化します。1つ目の軸にX軸・Y軸のラベルを設定します。plot()メソッドで t と data1 をプロットします。tick_p
-
PythonのBokehで画像を操作・表示する方法
Pythonの可視化ライブラリBokehで画像を扱うには、image_url()メソッドを使い、画像URLのリストを渡すのが基本です。このメソッドを使うことで、ローカルやWeb上にある画像をプロット領域内に簡単に配置できます。実装の手順output_file()でデフォルトの出力先を設定し、show()を呼び出したときに結果がHTMLファイルとして保存されるようにします。figure()でプロット用の新しいFigure(図)オブジェクトを作成します。image_url()メソッドで、指定したURLから読み込んだ画像を描画します。show()を呼び出して、Bokehオブジェクトやアプリケーション