페싱코드 파이썬 코드
윈도우에서 파이썬을 이용한 리눅스 원격 접속 및 명령 실행
정과장하루살이
2025. 7. 7. 13:56
반응형
윈도우 환경에서 파이썬을 이용해 리눅스 컴퓨터에 원격으로 접속하고 폴더 이동 및 명령을 실행하려면 paramiko 라이브러리를 사용하는 것이 가장 일반적이고 효과적인 방법입니다. paramiko는 SSHv2 프로토콜을 구현한 파이썬 라이브러리로, 원격 서버에 안전하게 접속하여 명령을 실행하고 파일을 전송하는 기능을 제공합니다.
import paramiko
def run_remote_commands(hostname, port, username, password, commands):
"""
원격 리눅스 서버에 접속하여 지정된 명령들을 실행합니다.
Args:
hostname (str): 리눅스 서버의 IP 주소 또는 호스트 이름.
port (int): SSH 포트 (기본값: 22).
username (str): SSH 접속 사용자 이름.
password (str): SSH 접속 비밀번호.
commands (list): 실행할 명령들을 담은 리스트.
"""
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 처음 연결 시 호스트 키 자동 추가
try:
# SSH 서버에 연결
print(f"Connecting to {username}@{hostname}:{port}...")
client.connect(hostname, port, username, password)
print("Connected successfully!")
for cmd in commands:
print(f"\nExecuting command: '{cmd}'")
stdin, stdout, stderr = client.exec_command(cmd)
# 표준 출력 및 에러 출력 읽기
output = stdout.read().decode('utf-8').strip()
error = stderr.read().decode('utf-8').strip()
if output:
print(f"Output:\n{output}")
if error:
print(f"Error:\n{error}")
except paramiko.AuthenticationException:
print("Authentication failed. Please check your username and password.")
except paramiko.SSHException as e:
print(f"SSH connection error: {e}")
except Exception as e:
print(f"An error occurred: {e}")
finally:
# 연결 종료
if client:
client.close()
print("\nConnection closed.")
if __name__ == "__main__":
# --- 설정 값 변경 필요 ---
# 실제 리눅스 서버 정보로 변경하세요.
REMOTE_HOST = 'your_linux_server_ip' # 예: '192.168.1.100'
SSH_PORT = 22
SSH_USERNAME = 'your_username' # 예: 'ubuntu'
SSH_PASSWORD = 'your_password' # 예: 'mysecretpassword'
# -----------------------
# 실행할 명령 리스트
# 'cd /path/to/your/directory' 명령으로 폴더 이동 후, 해당 폴더에서 ls -l 명령 실행
# 여러 명령을 실행할 경우, 각 명령을 리스트의 요소로 추가합니다.
commands_to_execute = [
"cd /home/your_username/test_folder", # 원하는 리눅스 폴더 경로로 변경
"ls -l", # 폴더 이동 후 파일 목록 확인
"echo 'Hello from Python on Windows!'" # 간단한 명령 실행 예시
#"mkdir new_directory" # 새 디렉토리 생성 (주석 해제 후 사용)
]
run_remote_commands(REMOTE_HOST, SSH_PORT, SSH_USERNAME, SSH_PASSWORD, commands_to_execute)
코드 설명
- paramiko.SSHClient(): SSH 클라이언트 객체를 생성합니다.
- client.set_missing_host_key_policy(paramiko.AutoAddPolicy()): 이 정책은 원격 서버의 호스트 키가 로컬 known_hosts 파일에 없는 경우 자동으로 추가하도록 설정합니다. 보안에 민감한 환경에서는 paramiko.WarningPolicy() 또는 paramiko.RejectPolicy()를 사용하고 호스트 키를 수동으로 확인하는 것이 좋습니다.
- client.connect(hostname, port, username, password): 지정된 IP 주소, 포트, 사용자 이름, 비밀번호를 사용하여 원격 리눅스 서버에 SSH 연결을 시도합니다.
- client.exec_command(cmd): 원격 서버에서 명령을 실행합니다. 이 함수는 세 개의 파일 객체(stdin, stdout, stderr)를 반환합니다.
- stdin: 명령에 입력할 데이터를 보낼 때 사용합니다.
- stdout: 명령의 표준 출력을 읽을 때 사용합니다.
- stderr: 명령의 표준 에러 출력을 읽을 때 사용합니다.
- stdout.read().decode('utf-8').strip(): stdout에서 데이터를 읽고 UTF-8로 디코딩한 후, 앞뒤 공백을 제거합니다.
- 에러 핸들링: try-except 블록을 사용하여 paramiko.AuthenticationException (인증 실패) 및 paramiko.SSHException (SSH 연결 관련 에러)를 처리합니다.
- client.close(): 모든 작업이 완료되면 SSH 연결을 닫습니다.
반응형