← 모든 문서

페어링, 재페어링, 머신 공유

Terminull이 실행되는 모든 머신에는 비컨 ID와 공개 키로 이루어진 영구 identity가 있으며, 이를 담은 terminull://pair QR을 표시합니다. QR은 두 종류가 있고, 스캔의 결과는 어떤 QR인지와 누가 스캔하는지에 따라 달라집니다. 이 섹션의 핵심은 바로 그 차이입니다. 한쪽 QR은 머신을 넘겨주고, 다른 쪽은 빌려줍니다.

페어링 — 머신을 처음 연결하기

macOS에서는 설정 마법사의 마지막 페이지에 QR이 표시되며, 메뉴 막대의 QR로 기기 추가에서 언제든 다시 열 수 있습니다. 헤드리스 Linux에서는 terminull 서비스가 페어링 URL을 텍스트로 출력합니다(SSH로는 터미널 QR을 읽을 수 없기 때문입니다). 이를 앱에 붙여넣거나 Mac 창으로 끌어다 놓으면 됩니다.

Windows에서는 설치 프로그램의 마지막 단계에 QR이 표시되며, 트레이 아이콘의 Pair a phone (QR)에서 언제든 다시 열 수 있습니다. 아니면 아무 터미널에서 terminull qr을 실행하세요.

앱에서 스캔하면 해당 머신이 내 계정에 등록되고, 나는 그 머신의 소유자가 됩니다. 앱이 비컨 ID와 공개 키를 등록하면, 머신은 영구 인증 토큰을 한 번 받아 온라인 상태가 됩니다. QR에는 비컨 ID, 머신의 공개 키, 일회용 키 교환 키, 홈 릴레이 주소, 그리고 한 번만 쓰는 클레임 코드만 들어 있습니다. 코드나 세션, 자격 증명은 절대 포함되지 않습니다.

헤드리스 머신에서 QR 얻기

새로 설치한 서비스는 페어링되지 않은 상태로 처음 시작할 때 자체 출력에 페어링 QR을 표시하고, 어떤 기기가 등록을 마치면 더 이상 표시하지 않습니다. 그 이후에 QR이 필요하면 실행 중인 서비스에 요청하세요.

terminull-admin qr        # print a QR (needs the service running)
terminull-admin qr --url  # just the pairing link, on stdout

QR은 명령을 입력한 터미널이 아니라 서비스의 출력에 그려집니다. 내 터미널에는 대신 링크가 돌아옵니다. systemd 환경에서 그 출력은 저널이므로 저널에서 렌더링하세요.

journalctl --user -u terminull --no-pager -o cat -n 40

-o cat은 선택이 아닙니다. 이 옵션이 없으면 journald가 모든 줄 앞에 타임스탬프와 유닛 이름을 붙이고, 그 때문에 코드의 각 행이 옆으로 밀립니다. 언뜻 멀쩡해 보여도 스캔되지 않습니다.

SSH에서는 보통 이미지보다 링크가 편합니다. terminull-admin qr --url은 앱에 붙여넣을 수 있는 순수 URL을 출력합니다. 직접 렌더러로 넘기면 저널을 아예 거치지 않습니다: terminull-admin qr --url | qrencode -t ANSI

흔히 걸리는 두 가지가 있습니다. 설치 프로그램이 이 명령을 서비스 자체 환경에 두기 때문에, 셸에서 찾지 못하면 전체 경로 ~/.local/share/terminull/venv/bin/terminull-admin을 쓰세요. 또 이 명령은 로컬 소켓으로 실행 중인 서비스와 통신하므로 “terminull is not running”은 말 그대로의 뜻입니다. systemctl --user start terminull로 시작한 뒤 다시 시도하세요. 출력된 것은 소유자 QR로 간주하고 위에서 설명한 주의사항을 모두 지키세요.

재페어링 — 같은 계정으로 다시 스캔하기

이미 그 머신을 소유한 계정으로 소유자 QR을 다시 스캔하는 것은 재등록이며, 몇 번을 반복해도 안전합니다. 저장된 공개 키와 이름을 갱신하고 토큰 발급 창을 다시 엽니다. 잃는 것은 없습니다. 세션은 휴대폰이 아니라 머신 자체에 있으므로 그대로 남아 있습니다.

본인의 두 번째 기기를 추가할 때(아이폰과 함께 아이패드를 쓰는 경우), 앱을 다시 설치했을 때, 또는 완전 삭제로 머신의 identity를 초기화했을 때 재페어링하세요. 마지막 경우에는 키가 새로 생성되는데, 재등록이 다시 기록하는 것이 바로 그 키입니다.

소유자 QR은 비밀입니다. 다른 계정이 스캔하면 그것은 참여가 아니라 소유권 이전입니다. 서버가 대기 상태로 기록하고, 머신이 다음번 폴링할 때 적용되어 머신이 내 계정에서 빠져나갑니다. 클레임 코드를 가지고 있다는 것은 머신에 물리적으로 접근할 수 있다는 증거이며, 그래서 머신에 대한 권한으로 취급됩니다. 소유권을 넘기지 않고 다른 사람을 들이려면 아래의 공유 QR을 사용하세요.

공유 — 다른 사람이 내 머신을 쓰게 하기

앱에서 계정을 열고 해당 머신을 찾아 옆의 QR 아이콘을 누르세요. 머신이 2분간 유효한 새 코드를 만들어 서버에 등록하고, 남은 시간이 표시되는 공유 QR을 보여줍니다. (뒤에 계정이 없는 LAN 전용 머신에서는 공유를 사용할 수 없습니다.)

다른 계정이 스캔하면 멤버로 참여합니다. 머신이 상대방 목록에 나타나고, 푸시 알림을 받으며, 그 머신에서 세션을 실행할 수 있습니다. 소유권은 바뀌지 않고 머신의 인증 토큰도 그대로입니다. 이미 참여한 멤버는 새로 공유를 열지 않아도 언제든 다시 스캔할 수 있습니다.

만료는 표시만 되는 것이 아니라 서버가 강제합니다. 일치하는 코드가 없는 스캔은 “이 머신은 지금 공유 중이 아닙니다”로 거부되고, 기한이 지난 경우에는 “이 공유 코드는 만료되었습니다 — 소유자에게 새 QR을 요청하세요”가 표시됩니다. 따라서 예전 공유 QR의 스크린샷은 아무 쓸모가 없습니다. 공유를 영구적인 권한이 아니라 의도적이고 순간적인 행위로 유지하는 것이 목적입니다.

지금 보고 있는 QR은 무엇인가?

소유자 QR공유 QR
찾는 위치설정 마법사 또는 메뉴 막대 → QR로 기기 추가앱 → 계정 → 머신 옆 QR 아이콘
유효 기간머신의 identity가 초기화될 때까지2분, 카운트다운 표시
내 계정으로 스캔하면재페어링 — 반복해도 안전달라지는 것 없음, 이미 추가됨
다른 사람 계정으로 스캔하면머신의 소유권을 가져감멤버로 참여, 소유자는 그대로
스크린샷해도 되나?아니요 — 비밀번호처럼 다루세요2분이 지나면 무해합니다

LAN 전용 페어링

pairing_mode = "lan"으로 설정한 머신은 전적으로 로컬 네트워크에서 페어링합니다. QR이 LAN 전용으로 표시되고, 앱은 계정 등록을 건너뛰며, 어느 단계에서도 서버가 관여하지 않습니다. 이 경우 머신은 같은 네트워크에서만 접근할 수 있고 푸시 알림과 클라우드 AI 어시스트는 사용할 수 없습니다. 공유도 불가능합니다. 공유는 서버를 거치는 개념인데 이 모드에는 서버가 없기 때문입니다.

Terminull Service 코어는 열려 있도록 설계되었습니다. 소스 구조, 전체 블록 레퍼런스, 핸드오프 설계는 이 저장소의 docs/에 함께 있습니다. 문의: hello@terminull.dev.