> ## Documentation Index
> Fetch the complete documentation index at: https://frp.xdr.ooo/llms.txt
> Use this file to discover all available pages before exploring further.

# Zero-Touch 등록

> 원격 사용자에게 한 줄 명령만 전달해 클라이언트를 등록하는 방법

# Zero-Touch 등록

Zero-Touch는 서버 관리자가 초기 Client 프로필을 정하고 원격 사용자에게 **한 줄 명령만 실행하게 하는** 권장 onboarding 방식입니다.

## 전체 흐름

```mermaid theme={null}
sequenceDiagram
    participant A as 서버 관리자
    participant S as FRP Auto Deploy 서버
    participant C as 원격 Client

    A->>S: Zero-Touch profile 생성
    S-->>A: one-time bootstrap 명령
    A-->>C: 비공개 채널로 전달
    C->>S: Verified HTTPS bootstrap + enrollment
    S-->>C: Persistent identity + service config
    C->>S: Outbound FRP tunnel 시작
```

원격 사용자는 FRP 설정 파일을 이해할 필요가 없습니다. 서버가 출력한 정확한 명령을 한 번 실행하면 됩니다.

## 가장 쉬운 생성 방식

```bash theme={null}
sudo frpctl
```

CLI 안에서:

```text theme={null}
create zero-touch
```

SSH 초기 프로필을 명시하려면:

```bash theme={null}
sudo frpctl create enrollment \
  --one-line \
  --ssh \
  --ssh-user aella \
  --label branch-a
```

`aella`는 원격 시스템에 이미 존재하는 SSH account여야 합니다.

## Zero-Touch가 하지 않는 것

* OS user 생성
* `sshd` 설치/설정
* password 설정
* SSH key 생성/배포
* client firewall 변경
* 외부 NAT 변경

즉 OS/application provisioning이 아니라 **FRP Auto Deploy onboarding**을 자동화합니다.

## 생성 명령은 민감 정보입니다

Bootstrap command에는 short-lived credential이 포함되거나 참조될 수 있습니다.

다음 위치에 남기지 마세요.

* public issue/ticket
* public chat
* analytics
* 문서 예제의 shell history
* long-lived log

Bootstrap Ticket은 high entropy, short-lived, first-machine bound, successful enrollment 후 single-use, server hashed-at-rest를 목표로 설계되어 있습니다.

## Stable v2.1.2 기준

Stable 서버에서는 **`frpctl`이 실제로 출력한 명령을 그대로** 사용하세요. 문서의 토큰/URL을 조합해서 임의로 다시 만들지 마세요.

<Accordion title="2.1.3 development: Short URL">
  2.1.3 development tree에는 operator-managed public bootstrap hostname을 이용한 짧은 URL 흐름이 추가됩니다. 외부 DNS, publicly trusted TLS, reverse proxy가 필요하므로 stable v2.1.2 기능으로 가정하지 마세요.
</Accordion>

## 실행 후 검증

Server:

```bash theme={null}
sudo frpctl show clients
sudo frpctl show enrollments
sudo frpctl show client <CLIENT-ID> services
```

Client:

```bash theme={null}
sudo frpctl show status
sudo frpctl show services
sudo frpctl doctor
```

## Active enrollment credential 차단

```bash theme={null}
sudo frpctl revoke enrollment <ID>
```

Enrollment credential revoke, enrolled client management revoke, public-port release는 서로 다른 lifecycle 작업입니다.
