기술 사양
Termini 데스크톱 앱의 각 세션 프로토콜에 대한 구현 세부, 인증 매트릭스, 채널 기능과 한계입니다. 모든 항목은 현재 구현과 일치하며, 없는 기능은 그렇게 표시하고 앞을 내다본 약속은 없습니다.
SSH
클라이언트는 자체 SSH 스택을 탑재하며 시스템 ssh 바이너리에 의존하지 않습니다. 연결, 인증, 포워딩이 모두 앱 안에서 이뤄지고, 키 저장소, 세션 워크스페이스, 운영 어시스턴트와 하나의 장치 신원을 공유합니다.
연결
- 기본 포트 22. 연결 제한 시간은 장치마다 설정할 수 있습니다.
- 장치마다 설정한 간격의 프로토콜 수준 keepalive로, NAT와 방화벽을 넘는 긴 세션을 유지합니다.
- 세션 재사용: 같은 장치의 여러 패널(터미널 / SFTP)이 하위 연결을 공유해 핸드셰이크와 로그인을 반복하지 않습니다.
인증 매트릭스
- 공개 키: 암호 문구와 인증서를 지원하는 OpenSSH 형식 개인 키. 키는 로컬 키 저장소에 보관됩니다. PuTTY PPK는 먼저 OpenSSH로 변환해야 합니다.
- Keyboard-interactive: 서버의 대화형 도전 흐름에 응답합니다.
- 비밀번호: 정적 비밀번호 인증.
- SSH agent: 시스템 에이전트에 로드된 신원을 씁니다. Windows에서는 Pageant도 지원합니다.
- 방식은 공개 키 → keyboard-interactive → 비밀번호 순으로 시도하고, 첫 성공에서 멈춥니다.
- 한계: GSSAPI 인증은 아직 없습니다.
터미널
- 터미널 유형(TERM)은 장치마다 지정할 수 있고, 크기는 패널을 실시간으로 따릅니다.
- 글꼴과 테마는 패널마다 조절할 수 있고, 찾기는 세션을 끊지 않습니다.
포트 포워딩
- 로컬 포워딩: 로컬 포트를 대상 네트워크 안의 서비스에 안전하게 연결합니다(-L 의미).
- 원격 포워딩: 원격 포트를 이쪽으로 가져와 역방향 장애 대응에 씁니다(-R 의미).
- 동적 포워딩: 로컬 SOCKS5 프록시를 열고 트래픽이 대상 호스트를 통해 나갑니다(-D 의미).
- 포워딩 규칙은 터미널 세션과 따로 관리되며, 언제든 시작하고 멈출 수 있고, 상태(유휴 / 실행 중 / 오류)를 보여줍니다.
Telnet
네트워크 장치와 레거시 시스템을 겨냥한 자체 Telnet 스택입니다. 전체 옵션 협상과 세션 적응으로 스크립트와 어시스턴트가 안정적으로 실행합니다.
옵션 협상
- BINARY: 바이너리 전송 모드.
- ECHO: 에코 제어(서버 측 에코를 받습니다).
- SGA: Go-Ahead를 억제해 전이중 상호작용을 합니다.
- TTYPE: 설정 가능한 후보 목록으로 터미널 유형을 보고합니다.
- NAWS: 창 크기 협상. 패널 크기 변경이 장치에 실시간으로 동기화됩니다.
- EOR: 레코드 끝 표시.
- 협상은 연결 설정 중에 끝나며 첫 데이터 패킷을 기다리지 않습니다.
세션 적응
- 로그인 프롬프트 감지: 사용자 이름 / 비밀번호 프롬프트를 자동으로 맞춰 스크립트와 어시스턴트가 안정적으로 로그인합니다.
- 페이징: 장치의 페이지 출력을 감지하고 자동으로 넘겨, 긴 출력이 잘리지 않게 합니다.
- 줄 끝(NVT EOL)과 명령 에코 검증을 설정해 벤더 차이를 맞춥니다.
Keepalive와 한계
- 이중 keepalive: TCP keepalive와 프로토콜 수준 NOP 하트비트.
- 한계: 문자셋 협상(RFC 2066)은 아직 없습니다.
RDP
비디오급 디코드·렌더 파이프라인을 갖춘 자체 RDP 스택입니다. 그래픽 데스크톱은 터미널 세션과 같은 워크스페이스에 정리됩니다.
보안 계층과 인증
- 보안 계층: 자동 협상 / TLS / NLA.
- NLA: Kerberos를 지원하는 CredSSP 위의 네트워크 수준 인증.
- RDSTLS: 리디렉션 시나리오의 RDSTLS 인증.
- Azure AD: AAD에 조인된 호스트에 브라우저 OAuth로 로그인.
- 도메인 계정 로그인. 자체 서명 인증서는 명시적으로 신뢰할 수 있습니다.
표시와 입력
- 고정 해상도 또는 창을 따름. 16 / 24 / 32비트 색 깊이.
- 서버와 협상하는 프레임 코덱: H.264 / AVC444 / WebP / PNG / JPEG / RAW.
- 키보드 레이아웃을 설정할 수 있습니다. 입력은 scancode와 Unicode 채널을 모두 쓰고, 수식 키 상태가 실시간으로 동기화됩니다.
- 마우스 이동, 버튼, 휠을 전부 매핑하고, 원격 커서 모양이 렌더를 따릅니다.
- 성능 플래그를 설정해 배경화면, 스무딩 등 원격 효과를 끄고 부드러움을 살립니다.
- 전체 화면: Ctrl+Alt+Pause는 전체 화면을 떠나고, Ctrl+Alt+Home은 연결 막대를 보여줍니다.
채널
- 클립보드(CLIPRDR): 양방향 텍스트, 파일, HTML, 이미지.
- 드라이브 리디렉션(RDPDR): 로컬 폴더를 원격 Explorer에 매핑합니다.
- 오디오(RDPSND): 원격 오디오를 로컬에서 재생합니다.
세션
- 선택적 콘솔(admin) 세션. 하트비트 keepalive는 장치마다 설정합니다.
SFTP
SSH 서브시스템 위에 구축되어, 인증, 호스트 신뢰, 하위 연결을 터미널 세션과 공유합니다. 로컬과 원격은 이중 패널 보기로 정리됩니다.
파일 작업
- 디렉터리 찾아보기, 올리기와 받기, 새 폴더 / 파일, 이름 바꾸기, 삭제.
- 권한 변경(chmod), 숨김 파일, 경로 복사.
전송 관리
- 같은 이름 충돌 감지: 건너뛰기 또는 덮어쓰기를 확인합니다. 조용히 덮어쓰지 않습니다.
- 진행은 현재 패널에 남고, 작업은 언제든 취소할 수 있습니다.
- 한계: 이어받기는 아직 없습니다(재개 오프셋은 하위에 예약되어 있습니다).
로컬 셸
- 로컬 PTY 세션: Windows는 ConPTY, macOS / Linux는 시스템 PTY.
- Windows는 사용 가능한 터미널을 자동 발견합니다. PowerShell, CMD, pwsh, WSL, Git Bash.
- 터미널 설정, 찾기, AI 명령 제안은 원격 세션과 같은 경험을 공유합니다.
신뢰와 keepalive
- 호스트 지문: 첫 연결에서 확인해야 합니다. 지문이 바뀌면 알림이 뜨고 거부, 한 번 신뢰, 영구 신뢰를 고릅니다.
- 자격 증명 경계: 장치 비밀번호, 개인 키, 암호 문구는 로컬 데이터에 남고 웹사이트 계정과 함께 업로드되지 않습니다.
- 프로토콜별 keepalive: SSH / RDP는 프로토콜 수준 하트비트, Telnet은 TCP keepalive와 NOP.
시스템 요구 사항
데스크톱
- WindowsWindows 10 / 11
- macOSApple Silicon과 Intel
- Linux주요 데스크톱 배포판
세션 프로토콜
- 원격SSH · Telnet · RDP · SFTP
- 로컬로컬 셸 (PTY / ConPTY)