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

PythonでSCPやSSHを使ってリモートサーバーへファイルをコピーする方法

SSH経由でサーバー間のファイルをコピーする最も簡単な方法は、scpコマンドを使用することです。Pythonからscpを呼び出すには、標準ライブラリのsubprocessモジュールを使います。

subprocessモジュールを使う方法

import subprocess

p = subprocess.Popen(["scp", "my_file.txt", "username@server:path"])
sts = os.waitpid(p.pid, 0)

waitpidを呼び出すことで、ファイルのコピーが完了するまで処理を待機できます。この呼び出しを省略すると、コピーが終わる前にスクリプトが次の処理へ進んでしまうため注意が必要です。

paramikoとscpモジュールを使う方法

もうひとつの方法として、SSH接続を開いてscpモジュールを利用するやり方があります。この方法では、外部コマンドを呼び出さずにPythonのコードだけで完結できるのがメリットです。

まず、必要なライブラリをインストールします。

pip install paramiko scp

続いて、以下のように記述します。

from paramiko import SSHClient
from scp import SCPClient

ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('user@server:path')
with SCPClient(ssh.get_transport()) as scp:
    scp.put('my_file.txt', 'my_file.txt')  # my_file.txtをサーバーへコピー

それぞれの方法の使い分け

  • subprocess方式: シンプルで追加ライブラリが不要。ただし、実行環境にscpコマンドがインストールされている必要があります。
  • paramiko + scp方式: 純粋なPythonで動作するため環境を選ばず、エラーハンドリングや進捗管理も柔軟に行えます。

用途や実行環境に応じて、適切な方法を選択してください。

  1. Tkinterを使ってファイルのハードコピー(印刷)を行う方法

    Tkinterは、ローカルシステム内のファイルとやり取りできる機能を開発者に提供するPythonの標準GUIライブラリです。この記事では、filedialogモジュールとwin32apiモジュールを組み合わせて、選択したファイルをプリンターから印刷(ハードコピー)する方法を解説します。必要なモジュールのインストールまず、これらのパッケージを使用するために、環境にモジュールをインストールしておく必要があります。win32apiはWindows専用のライブラリのため、以下のコマンドでpywin32をインストールしてください。pip install pywin32サンプルコード# 必要なライブラリを

  2. LinuxでSCPを使ってファイルを安全に転送する方法を徹底解説

    Linuxサーバーへアクセスする方法はいくつかあります。GUI(ユーザーインターフェース)付きのサーバーであればVNCを利用できますが、より一般的なのは、SSH(Secure Shell)を使ってヘッドレスサーバーにログインする方法です。SSHは暗号化された安全なプロトコルで、SSHクライアント経由でリモートシステムにアクセスできます。しかし、単にファイルをサーバーへ送りたいだけという場面もあるでしょう。そんなときに便利なのが「SCP(Secure Copy)」です。SCPは堅牢なSSHプロトコル上で動作し、ネットワーク越しに素早くファイルをリモートシステムへ転送できます。この記事では、Li