Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การ Copy ไฟล์ไป Remote Server ใน Python (SCP/SSH)

มี 2 วิธีหลัก: ใช้ scp command ผ่าน subprocess หรือใช้ paramiko + scp module

วิธีที่ 1: subprocess + scp command (ง่าย ไม่ต้อง library เพิ่ม)

import subprocess
import os

p = subprocess.Popen(["scp", "my_file.txt", "username@server:/remote/path"])
sts = os.waitpid(p.pid, 0)  # รอจน copy เสร็จ

# หรือใช้ run() (Python 3.5+)
subprocess.run(["scp", "my_file.txt", "username@server:/remote/path"], check=True)

วิธีที่ 2: Paramiko + SCPClient (Programmatic, ใช้ SSH Connection เดียว)

# 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')  # (local, remote)
    # scp.put('local_dir', 'remote_dir', recursive=True)  # โฟลเดอร์

ssh.close()

ดาวน์โหลดจาก Server (Get)

with SCPClient(ssh.get_transport()) as scp:
    scp.get('remote_file.txt', 'local_file.txt')
    # scp.get('remote_dir', 'local_dir', recursive=True)

เปรียบเทียบ

วิธีข้อดีข้อเสีย
subprocess + scpง่าย ไม่ต้อง import เพิ่ม, ใช้ CLI scp ปกติProcess ใหม่ทุกครั้ง, ไม่ได้ reuse SSH connection
Paramiko + SCPClientReuse SSH connection, Programmatic control, Progress callbackต้อง install paramiko, scp