Python에서 SSH를 사용하는 가장 쉬운 방법
Python으로 SSH 연결을 수행하는 가장 간단한 방법은 paramiko 라이브러리를 사용하는 것입니다. Paramiko는 SSHv2 프로토콜을 순수 Python으로 구현한 라이브러리로, 원격 서버에 안전하게 접속하고 명령을 실행할 수 있게 해줍니다.
Paramiko 설치하기
pip를 사용하여 간단히 설치할 수 있습니다.
$ pip install paramiko
사전 준비 사항
Paramiko를 본격적으로 사용하기 전에 다음 사항을 확인해야 합니다.
1. 호스트 머신에 SSH 키가 올바르게 설정되어 있는지 확인합니다. 아직 키가 없다면 ssh-keygen 명령어로 생성할 수 있습니다.
2. Python 스크립트를 실행할 때 해당 키에 접근 가능한지 확인합니다.
3. 원격 서버의 ~/.ssh/authorized_keys 파일에 공개 키가 등록되어 있는지 점검합니다.
원격 서버에 접속하여 명령 실행하기
준비가 완료되면 아래 코드를 사용하여 SSH로 원격 서버에 연결하고 명령을 실행할 수 있습니다.
from paramiko import SSHClient
ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('user@server:path')
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('ls')
print(ssh_stdout.read().decode()) # ls 명령의 출력 결과 출력코드 설명:
- SSHClient(): SSH 클라이언트 객체를 생성합니다.
- load_system_host_keys(): 시스템의 known_hosts 파일을 로드하여 호스트 검증을 수행합니다.
- connect(): 지정된 사용자 계정과 서버 주소로 연결을 시도합니다.
- exec_command('ls'): 원격 서버에서 ls 명령을 실행하고, 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 세 개의 스트림을 반환합니다.
위 코드를 실행하면 원격 서버의 디렉터리 목록이 출력됩니다. 참고로 exec_command는 바이트 형태의 결과를 반환하므로, read().decode()를 적용하면 사람이 읽기 좋은 문자열로 변환됩니다.
추가 팁
실제 운영 환경에서는 비밀번호 대신 SSH 키 기반 인증을 사용하는 것이 보안상 권장됩니다. 또한 여러 대의 서버를 관리해야 한다면 Fabric이나 AsyncSSH 같은 상위 수준 라이브러리도 고려해볼 만합니다.