Engineering/Windows

Putty 에서 사용했던 세션 정보를 Secure CRT 로 이동하는 방법

부스 boos 2026. 8. 12. 09:55
728x90

 무료로 사용했던 터미널 프로그램인 Putty 에서 사용했던 세션(서버 접속) 리스트를 유료인 Secure CRT 프로그램으로 옮기는 방법을 정리해본다.

  Putty 는 간단하게 서버에 접속해서 사용할 수는 있지만 로그인할때 패스워드 저장이 직관적으로 지원하지도 않기도 하고(방법이 없는건 아니지만 설정 방법이 번그롭다) Secure CRT 에서 지원되는 여러 창에 같은 명령어를 전달할 수 있는 기능 때문이라도 옮겨야 하는 상황이다.


1. cmd 창에서 다음 명령어로 Putty 세션을 작업 디렉토리에 저장한다.

reg export "HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions" "D:\WorkDir\putty-sessions.reg"


2. 아래 python 파일을 작업 디렉토리에 convert.py 로 저장한다. 레지스트리 내용을 CRT 에서 사용하는 ini 파일 형식으로 변경한다.

import os
import re
import urllib.parse

# 1단계에서 내보낸 reg 파일 이름
reg_file_path = "putty-sessions.reg"
# 저장될 SecureCRT Sessions 폴더명
output_dir = "SecureCRT_Sessions"

if not os.path.exists(output_dir):
    os.makedirs(output_dir)

def parse_reg_file(filepath):
    sessions = {}
    current_session = None
    
    # reg 파일 읽기 (UTF-16 또는 UTF-8)
    encoding = 'utf-16'
    try:
        with open(filepath, 'r', encoding=encoding) as f:
            lines = f.readlines()
    except UnicodeError:
        encoding = 'utf-8'
        with open(filepath, 'r', encoding=encoding) as f:
            lines = f.readlines()

    session_pattern = re.compile(r'^\[HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions\\(.*)\]')
    value_pattern = re.compile(r'^"(.*?)"="(.*?)"')

    for line in lines:
        line = line.strip()
        session_match = session_pattern.match(line)
        if session_match:
            raw_name = session_match.group(1)
            # URL 인코딩된 세션 이름 디코딩 (%20 -> 공백)
            session_name = urllib.parse.unquote(raw_name)
            current_session = session_name
            sessions[current_session] = {}
            continue
        
        if current_session:
            value_match = value_pattern.match(line)
            if value_match:
                key, val = value_match.group(1), value_match.group(2)
                sessions[current_session][key] = val

    return sessions

def create_crt_ini(session_name, data):
    host = data.get("HostName", "")
    port = data.get("PortNumber", "22")
    if port.startswith("dword:"):
        port = str(int(port.replace("dword:", ""), 16))
    
    username = data.get("UserName", "")
    protocol = data.get("Protocol", "ssh")
    
    # SecureCRT 세션 ini 내용 구성
    ini_content = f"""S:"Protocol Name"={protocol.upper()}
S:"Hostname"={host}
S:"Username"={username}
D:"[SSH2] Port"={int(port):08x}
"""
    # 안전한 파일명 생성
    safe_name = re.sub(r'[\\/:*?"<>|]', '_', session_name)
    file_path = os.path.join(output_dir, f"{safe_name}.ini")
    
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(ini_content)

sessions = parse_reg_file(reg_file_path)
for session_name, data in sessions.items():
    if data: # 빈 세션 제외
        create_crt_ini(session_name, data)

print(f"변환 완료! '{output_dir}' 폴더에 {len(sessions)}개의 세션이 생성되었습니다.")


3. reg 파일을 위의 convert.py 를 실행하면 output_dir 인 SecureCRT_Sessions 폴더에 putty 의 세션들이 파일로 생성된다.

4. "Options > Global Options..." 에서 "General - Configuration paths" 의 있는 경로를 확인한다.
ex) C:\Users\{{user}}}\AppData\Roaming\VanDyke\Config

5. Config 폴더안의 Sessions 폴더에 SecureCRT_Sessions 폴더의 파일들을 복사후, SecureCRT 를 재시작하면 Session Manager 탭에 추가된 내용이 보일것이다.