공부를 함시다/Python

[Python] 파이썬으로 원격 데스크톱 활성화

갈룩시노테7 2024. 11. 12. 23:22
반응형
import subprocess
import time
import sys

def enable_remote_desktop():
    try:
        # 원격 데스크톱 활성화 (레지스트리 설정)
        subprocess.run(
            'powershell -Command "Set-ItemProperty -Path \'HKLM:\\System\\CurrentControlSet\\Control\\Terminal Server\' -Name fDenyTSConnections -Value 0"',
            shell=True,
            check=True
        )
        print("원격 데스크톱 기능이 성공적으로 활성화되었습니다.")
        
    except subprocess.CalledProcessError as e:
        print("오류가 발생했습니다:", e)

def enable_firewall_rule():
    try:
        # PowerShell에서 방화벽 규칙 활성화 명령어 실행
        subprocess.run(
            'powershell -Command "Enable-NetFirewallRule -DisplayGroup \'원격 데스크톱\'"',
            shell=True,
            check=True
        )
        print("방화벽 규칙이 성공적으로 활성화되었습니다.")
    except subprocess.CalledProcessError as e:
        print("오류가 발생했습니다:", e)


def portnumber_change(port_number=10002):
    try:
        # 첫 번째 레지스트리 경로에서 RDP 포트 번호 설정
        command1 = f'powershell -Command "Set-ItemProperty -Path \'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\Wds\\rdpwd\\Tds\\tcp\' -Name PortNumber -Value {port_number}"'
        subprocess.run(command1, shell=True, check=True)
        
        # 두 번째 레지스트리 경로에서 RDP 포트 번호 설정
        command2 = f'powershell -Command "Set-ItemProperty -Path \'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\' -Name PortNumber -Value {port_number}"'
        subprocess.run(command2, shell=True, check=True)

        print("Port Number가 성공적으로 변경되었습니다.")
    except subprocess.CalledProcessError as e:
        print("오류가 발생했습니다:", e)


def add_firewall_rule(port_number=10002):
    try:
        # PowerShell 명령어 실행하여 방화벽 규칙 추가
        command = f'powershell -Command "New-NetFirewallRule -DisplayName \'원격 데스크톱 연결({port_number})\' -Direction Inbound -Protocol TCP -LocalPort {port_number} -Action Allow"'
        subprocess.run(command, shell=True, check=True)
        
        print(f"포트 {port_number}에 대한 방화벽 규칙이 성공적으로 추가되었습니다.")
    except subprocess.CalledProcessError as e:
        print("오류가 발생했습니다:", e)


def restart_term_service():
    try:
        #subprocess.run('net stop SessionEnv', shell=True, check=True)  # 'SessionEnv'는 일반적인 종속 서비스입니다.
        
        # TermService 중지
        subprocess.run('net stop TermService', shell=True, check=True)
        
        # TermService 시작
        subprocess.run('net start TermService', shell=True, check=True)
        
        # 종속 서비스 다시 시작
        #subprocess.run('net start SessionEnv', shell=True, check=True)
        
        print("TermService가 성공적으로 다시 시작되었습니다.")
    except subprocess.CalledProcessError as e:
        print("오류가 발생했습니다:", e)


# 함수 호출
portnumber = input("입력하실 포트 번호를 입력해주세요. : ")
enable_remote_desktop()
time.sleep(5)
enable_firewall_rule()
time.sleep(5)
portnumber_change(portnumber)
time.sleep(5)
add_firewall_rule(portnumber)
time.sleep(5)
restart_term_service()

print("원격 데스크톱 서비스가 성공적으로 활성화되었습니다.")
print("자동으로 종료됩니다.")
time.sleep(5)
sys.exit(0)
반응형