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 기반 접근이 더 권장됩니다.