Python サーバー プログラミング: Paramiko を使用して SSH リモート操作を実装する

WBOY
リリース: 2023-06-18 13:10:53
オリジナル
2777 人が閲覧しました

クラウド コンピューティングとモノのインターネットの発展に伴い、サーバーのリモート操作がますます重要になっています。 Python では、Paramiko モジュールを使用して SSH リモート操作を簡単に実装できます。この記事では、Paramiko の基本的な使い方と、Python で Paramiko を使用してサーバーをリモート管理する方法を紹介します。

Paramiko とは

Paramiko は、SSH クライアントと SSH サーバーの接続と制御に使用できる SSHv1 および SSHv2 用の Python モジュールです。 Paramiko モジュールを使用すると、リモートでログインしてサーバーを操作するための Python スクリプトを簡単に作成できます。

Paramiko の基本的な使用法

Paramiko モジュールの基本的な使用法は非常に簡単で、Paramiko の SSHClient クラスを使用して SSH クライアント オブジェクトを作成し、SSH サーバーに接続できます。基本的な例を次に示します。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')
ログイン後にコピー

この例では、最初に SSHClient オブジェクトを作成し、set_missing_host_key_policy メソッドを使用して、不足している SSH キーを自動的に追加できるようにします。次に、connect メソッドを使用して SSH サーバーに接続し、ホスト名、ユーザー名、パスワードをパラメーターとして渡します。

これで、SSH サーバーへの接続に成功しました。次に、SSHClient オブジェクトを使用して、サーバーのオペレーティング システム情報の取得などのリモート コマンドを実行できます。

stdin, stdout, stderr = ssh.exec_command('uname -a')
print(stdout.read())
ログイン後にコピー

この例では、exec_command メソッドを使用して uname -a コマンドを実行し、出力を取得します。また、stdout.read() を使用して出力を読み取り、出力しました。

リモート コマンドの実行に加えて、SSHClient オブジェクトを使用してファイルをアップロードおよびダウンロードすることもできます。ファイルをアップロードする例を次に示します。

sftp = ssh.open_sftp()
local_file = '/path/to/local/file.txt'
remote_file = '/path/to/remote/file.txt'
sftp.put(local_file, remote_file)
sftp.close()
ログイン後にコピー

この例では、まず open_sftp メソッドを使用して SFTP セッションを開き、put メソッドを使用してローカル ファイルをリモート サーバーにアップロードします。また、sftp.close() メソッドを使用して SFTP セッションを閉じました。

Paramikoを使ってSSHリモート操作を実現する

Paramikoの基本的な使い方がわかったので、次はParamikoを使ってサーバーをリモート操作してみます。次の機能を実装します。

  • SSH サーバーに接続し、いくつかの基本的なコマンドを実行します
  • フォルダーの作成と削除
  • ファイルのアップロードとダウンロード

まず、Paramiko モジュールをインストールする必要があります:

pip install paramiko
ログイン後にコピー

次に、Python スクリプトを作成します。まず、必要なモジュールをインポートします:

import os
import paramiko
ログイン後にコピー

次に、SSH サーバーのホスト名、ユーザー名、パスワードを含むいくつかの定数を定義します:

HOST = 'hostname'
USER = 'username'
PASSWORD = 'password'
ログイン後にコピー

次に、paramiko.SSHClient を使用できます。 SSH サーバーに接続するクラス:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, username=USER, password=PASSWORD)
ログイン後にコピー

この例では、set_missing_host_key_policy() メソッドを使用して、不足している SSH キーを自動的に追加します。

次に、さまざまなタスクを実行するためのいくつかの関数を定義します。 1 つ目はコマンドを実行する関数です。

def run_command(command):
    stdin, stdout, stderr = ssh.exec_command(command)
    output = stdout.read().decode('utf-8')
    return output
ログイン後にコピー

この関数はコマンド パラメーターを受け取り、SSHClient オブジェクトの exec_command メソッドを使用してコマンドを実行し、出力を文字列として返します。

次に、ディレクトリを作成する関数を定義します。

def create_directory(path):
    sftp = ssh.open_sftp()
    try:
        sftp.mkdir(path)
    except IOError:
        pass
    sftp.close()
ログイン後にコピー

この関数は、パス パラメーターを受け取り、SFTP セッションを使用してディレクトリを作成します。

ファイルをアップロードおよびダウンロードする関数も定義します:

def upload_file(local_path, remote_path):
    sftp = ssh.open_sftp()
    sftp.put(local_path, remote_path)
    sftp.close()


def download_file(remote_path, local_path):
    sftp = ssh.open_sftp()
    sftp.get(remote_path, local_path)
    sftp.close()
ログイン後にコピー

これらの関数は、それぞれローカル パスとリモート パス (アップロード用)、またはリモート パスとローカル パス (ダウンロード用) を受け取ります)、 SFTP セッションを使用して、対応するファイルをアップロードまたはダウンロードします。

最後に、すべてのタスクを実行する main 関数を定義します:

def main():
    # Run a command
    output = run_command('ls -la')
    print(output)

    # Create a directory
    create_directory('/home/username/new_folder')

    # Upload a file
    upload_file('/path/to/local/file.txt', '/home/username/new_folder/file.txt')

    # Download a file
    download_file('/home/username/new_folder/file.txt', '/path/to/local/file.txt')

    # Close the SSH connection
    ssh.close()
ログイン後にコピー

この main 関数は次のタスクを実行します:

  • ls -la コマンドを実行し、 print 出力
  • 新しいディレクトリを作成しました
  • ファイルをアップロードしました
  • 同じファイルをダウンロードしました
  • SSH 接続を閉じました

Nowこのスクリプトを実行して出力を表示できます:

python ssh.py
ログイン後にコピー

結果は次のようになります:

total 20
drwxr-xr-x 1 username username 4096 Aug 15 02:24 .
drwxr-xr-x 1 username username 4096 Aug 15 02:20 ..
-rw------- 1 username username 1675 Aug 15 02:21 .bash_history
-rw-r--r-- 1 username username  220 Aug 15 02:20 .bash_logout
-rw-r--r-- 1 username username 3771 Aug 15 02:20 .bashrc
drwx------ 1 username username 4096 Aug 15 02:20 .cache
drwxr-xr-x 1 username username 4096 Aug 15 02:20 .config
drwx------ 1 username username 4096 Aug 15 02:20 .gnupg
-rw-r--r-- 1 username username  807 Aug 15 02:20 .profile
-rw-r--r-- 1 username username    0 Aug 15 02:21 test.txt
ログイン後にコピー

Summary

SSH リモートは、Paramiko を使用して簡単に実現できます。モジュールが動作します。この記事では、Paramiko の基本的な使用法を紹介し、Python で Paramiko を使用してサーバーをリモート管理する方法を示しました。クラウド コンピューティングの分野でも、モノのインターネットの分野でも、Paramiko はサーバー管理の自動化に役立つ非常に便利なツールです。

以上がPython サーバー プログラミング: Paramiko を使用して SSH リモート操作を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!