Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Copy file giữa hai server bằng Python (SCP)

Tương tự copy local→remote, nhưng source là remote server. Cần SSH agent forwarding hoặc key trên server trung gian.

Cách 1: subprocess + scp (server A → server B)

import subprocess, os
# Chạy trên machine có quyền truy cập cả 2 server
p = subprocess.Popen(["scp", "user@serverA:/path/file.txt", "user@serverB:/path/"])
os.waitpid(p.pid, 0)

Cách 2: paramiko + scp (khuyến nghị)

from paramiko import SSHClient
from scp import SCPClient

# Kết nối server A (source)
with SSHClient() as ssh_a:
    ssh_a.load_system_host_keys()
    ssh_a.connect('serverA', username='user', key_filename='~/.ssh/id_rsa')
    
    with SCPClient(ssh_a.get_transport()) as scp:
        # Download từ A về local tạm
        scp.get('/remote/path/file.txt', '/tmp/file.txt')

# Kết nối server B (dest) và upload
with SSHClient() as ssh_b:
    ssh_b.load_system_host_keys()
    ssh_b.connect('serverB', username='user', key_filename='~/.ssh/id_rsa')
    
    with SCPClient(ssh_b.get_transport()) as scp:
        scp.put('/tmp/file.txt', '/remote/path/file.txt')

Cách 3: SSH Agent Forwarding (trực tiếp A→B không qua local disk)

Cấu hình ForwardAgent yes trong SSH config, dùng key trên server A để truy cập server B.