Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 서버 간 파일 복사하기: SCP를 활용한 두 가지 방법

SSH를 통해 한 서버에서 다른 서버로 파일을 복사하는 가장 간단한 방법은 scp 명령어를 사용하는 것입니다. Python에서 이 명령어를 호출하려면 표준 라이브러리의 subprocess 모듈을 활용하면 됩니다.

방법 1: subprocess 모듈로 scp 명령어 실행

운영체제에 설치된 scp 명령어를 직접 호출하는 방식입니다. 다음 예제를 참고하세요.

import subprocess

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

여기서 waitpid 호출은 파일 복사 작업이 완전히 끝날 때까지 프로세스가 대기하도록 해줍니다. 이 호출이 없으면 복사가 완료되기 전에 스크립트가 다음 단계로 넘어갈 수 있으므로 반드시 포함해야 합니다.

방법 2: paramiko와 scp 모듈 사용

또 다른 방법은 SSH 연결을 직접 열고 scp 모듈을 사용하는 것입니다. 이 방식은 외부 명령어를 셸에서 실행하지 않고 순수 Python 코드만으로 파일을 전송할 수 있다는 장점이 있습니다.

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를 서버로 복사

이 방법을 사용하려면 먼저 의존성 패키지를 설치해야 합니다.

pip install paramiko scp

두 방법의 차이점

  • subprocess 방식: 시스템에 scp가 설치되어 있어야 하며, 설정이 간단하고 빠르게 구현할 수 있습니다.
  • paramiko 방식: 별도의 외부 명령어 없이 Python 내부에서 SSH 연결을 관리할 수 있어, 인증 처리나 오류 제어 등 세밀한 로직 구현에 유리합니다.

간단한 일회성 스크립트라면 subprocess 방식으로 충분하지만, 자동화 도구나 지속적인 파일 동기화처럼 안정성과 유연성이 중요한 환경에서는 paramiko 기반 접근이 더 권장됩니다.