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.