SSH 신뢰와 로컬 탐색

열린 SSH 포트를 찾는 것은 편리하지만 신뢰는 아닙니다. 연결 대상의 신원과 자격증명은 사용자의 명시적 결정 뒤에 둡니다.

소스 기준: 앱 1.0.1 (2) · 2026년 8월 14일

대상 탐색

호스트와 포트 직접 입력은 항상 사용할 수 있습니다. Wi-Fi가 연결되면 별도 탐색 제어기가 현재 /24에서 선택한 TCP 포트를 검색하고, 포트나 Android 기본 네트워크가 바뀌면 결과를 갱신합니다.

구현Flutter UI, Dart SSH 클라이언트와 터미널 에뮬레이터
자동 탐색현재 Wi-Fi /24의 254개 주소, 선택한 TCP 포트 하나
인증사용자명과 비밀번호
서버 식별호스트·포트별 TOFU 호스트 키 지문

탐색은 후보 끝점을 만들 뿐 세션을 자동 시작하지 않습니다. 가용성 확인과 인증·권한을 분리합니다.

WiFi Scanner는 dstools-ssh://connect/connect?host=<host>&port=<port>를 열 수 있습니다. 앱 경계를 건너는 값은 호스트와 포트뿐이며 사용자명·비밀번호·명령·터미널 내용은 제외합니다.

TOFU와 보안 로컬 저장

처음 연결할 때 서버 키 종류와 SHA-256 지문을 보여주고 승인을 받습니다. 승인한 지문은 대상별로 저장합니다. 이후 값이 달라지면 알려진 값을 조용히 바꾸지 않고 호스트 키 변경 경고를 냅니다.

TOFU는 첫 신뢰 이후의 변경을 찾습니다. 처음 만난 끝점이 정당하다는 증명은 아니므로 중요하면 별도 신뢰 경로로 첫 지문을 비교해야 합니다.

저장한 자격증명과 알려진 호스트 지문은 앱의 보안 키-값 경계를 통해 Android 기반 보안 저장소에 둡니다. 사용자가 앱 자료나 항목을 지우기 전까지 로컬에 남습니다.

터미널 자료 경로

인증 뒤 터미널 화면 크기에 맞는 PTY를 엽니다. 표준 출력과 오류를 디코딩해 터미널로 보내고 터미널 입력은 인코딩해 SSH 세션에 씁니다. 크기 변경은 원격 PTY에 반영하며 모바일 키 모음이 화면 키보드에서 누르기 어려운 키를 제공합니다.

검증과 확인된 제약

Wi-Fi 네트워크 변경, 포트 검색, 탐색 취소, 대상 해석, 보안 저장소, TOFU 결정, 터미널 키 변환, 설정과 지역화 UI 경로를 시험합니다.