SSH 환경에서는 모듈을 직접 호출할 수 없습니다
SSH 연결 자체는 매우 제한적인 기능만 제공하기 때문에, Paramiko로 원격 컴퓨터에 접속했다고 해서 해당 머신에 설치된 Python 모듈을 마치 로컬처럼 직접 호출할 수 있는 것은 아닙니다. SSH는 명령 실행과 파일 전송 정도의 인터페이스만 지원하며, 원격지의 Python 인터프리터와 프로세스 메모리를 공유하지 않기 때문입니다.
해결 방법 1: 원격 서버에서 스크립트 실행하기
가장 일반적인 우회 방법은 원격 서버에 Python 스크립트를 두고, SSH 세션을 통해 그 스크립트를 실행하는 것입니다. 예를 들어 python /path/to/script.py 형태의 명령을 Paramiko의 exec_command()로 전달하면 됩니다.
실행 결과를 확인하는 방법은 크게 두 가지입니다.
첫째, 표준 출력(stdout) 읽기: 스크립트가 결과를 print 문으로 출력하도록 작성했다면, SSH 채널의 stdout을 한 줄씩 읽어 결과를 받아올 수 있습니다. 간단한 값이나 로그성 데이터를 주고받을 때 유용합니다.
둘째, 파일을 통한 결과 교환: 스크립트가 처리 결과를 원격 서버의 파일에 기록하게 하고, 실행이 끝난 후 SFTP 등을 통해 해당 파일을 읽어오는 방식입니다. JSON이나 CSV처럼 구조화된 형식으로 저장하면 복잡한 데이터도 안전하게 주고받을 수 있습니다.
해결 방법 2: 네트워크 기반 RPC 라이브러리 Pyro4 활용
순수하게 네트워크를 통해서만 원격 기능을 호출하고 싶다면 Pyro4(PYthon Remote Objects) 라이브러리를 검토해 보세요. Pyro는 이름 그대로 '파이썬 원격 객체'를 위한 라이브러리로, 서로 다른 컴퓨터에 있는 객체들이 네트워크를 통해 마치 같은 프로세스 안에 있는 것처럼 통신할 수 있도록 도와줍니다.
Pyro의 가장 큰 장점은 최소한의 프로그래밍 노력으로 분산 애플리케이션을 만들 수 있다는 점입니다. 개발자는 평소처럼 일반적인 Python 메서드 호출 문법을 그대로 사용하면 되고, 거의 모든 종류의 파라미터와 반환값 타입이 지원됩니다. 나머지 작업—즉, 어떤 컴퓨터의 어떤 객체가 해당 메서드를 실행해야 하는지 찾아 연결하는 일—은 Pyro가 알아서 처리해 줍니다.
정리
Paramiko(SSH)만으로는 원격 Python 모듈을 직접 import하거나 호출할 수 없습니다. 단발성 작업이라면 원격에서 스크립트를 실행하고 stdout 또는 파일로 결과를 주고받는 방식이 실용적이며, 지속적으로 원격 객체의 메서드를 호출해야 하는 구조라면 Pyro4 같은 RPC 라이브러리를 도입하는 것이 더 깔끔한 해결책입니다.