업데이트로 돌아가기
New releaseSep 2, 2026

bitbang-cli v0.5.0

포트 포워딩이나 계정 없이 브라우저 또는 CLI를 사용하여, 종단 간 암호화된 피어투피어 WebRTC를 통해 대화형 셸, 파일 전송, 웹 프록시를 제공하는 머신에 대한 안전한 원격 접속을 설정합니다.

공유

BitBang CLI

Tests License

bitbang은 단일 정적 바이너리로 제공되는 원격 접근 멀티툴입니다. 어떤 브라우저에서든 원격 머신에 대한 대화형 셸과 파일 브라우저에 접근할 수 있습니다. 또한 해당 머신의 네트워크에 있는 웹 앱에도 접근할 수 있습니다. 브라우저 외에도 TCP 포트 포워딩, 파일 복사, 터미널 공유를 지원합니다. 계정이나 설정이 필요 없으며, 그냥 실행하면 됩니다.

bitbang을 설치하고, bitbang serve를 실행한 뒤, 출력된 URL을 브라우저에서 열면 셸, 파일 브라우저, 머신 네트워크 프록시를 사용할 수 있습니다

접근하려는 머신에서:``` curl -sSfL bitba.ng/install | sh bitbang serve

`serve`는 URL을 출력합니다. 아무 브라우저에서나 열면 터미널, 파일 브라우저, 그리고 해당 머신의 네트워크에 대한 프록시를 얻을 수 있습니다. 또는 다른 터미널에서 `bitbang connect <url>`로 같은 머신에 접속할 수 있으며, 이는 포트 포워딩(`-L`)과 파일 복사(`bitbang cp`)를 추가합니다. 연결은 종단 간 암호화되고 P2P 방식입니다. `bitba.ng` 서버는 양쪽 끝을 소개한 후 물러납니다.

`bitbang`은 단일 정적 Go 바이너리입니다. [BitBang 프로젝트](https://github.com/richlegrand/bitbang)의 일부이며, 이 [백서](https://github.com/richlegrand/bitbang/blob/main/whitepaper.md)에서 설계를 자세히 다룹니다.

## 비교

|                                | ngrok                  | Tailscale                      | `bitbang`           |
| ------------------------------ | ---------------------- | ------------------------------ | ------------------- |
| 첫 사용 전 설정         | 계정 + authtoken    | 계정 + 각 기기에서 로그인 | **명령 하나 실행** |
| 무언가를 공유하려면 실행하는 것 | 웹 서버 + ngrok | 양쪽 머신에 클라이언트 | **`bitbang serve`** |
| 원격 브라우저가 받는 것 | 이미 실행 중이던 웹 서버 | 없음 -- 클라이언트가 필요함 | **원격 네트워크의 터미널, 파일 브라우저, 웹 앱** |
| 데이터 경로                      | 그들의 서버          | P2P (릴레이 폴백)           | **P2P (릴레이 폴백)** |
| 종단 간 암호화           | 기본적으로 아님         | 예                            | **예**             |

## 빠른 레시피

**집에 있는 서비스에 접속하기**

- [어디서나 집 NAS 마운트하기 (SMB)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#mount-your-home-nas-from-anywhere-smb)
- [어디서나 미디어 라이브러리 시청하기 (Jellyfin)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-your-media-library-from-anywhere-jellyfin)
- [어디서나 자체 LLM 사용하기 (Ollama, Open WebUI)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#use-your-own-llm-from-anywhere-ollama-open-webui)
- [보안 카메라 확인하기 (Frigate)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-security-cameras-frigate)
- [노출 없이 홈 자동화에 접속하기 (Home Assistant)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-your-home-automation-without-exposing-it-home-assistant)
- [집 프린터로 인쇄하기 (IPP, CUPS)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#print-to-your-home-printer-ipp-cups)

**머신에 접속하기**

- [NAT 뒤의 머신에서 셸 얻기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-on-a-machine-behind-nat)
- [휴대폰에서 셸 얻기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-from-your-phone)
- [Windows 머신에 원격 데스크톱 접속 (RDP)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#remote-desktop-into-a-windows-machine-rdp)
- [Linux 또는 Mac 데스크톱 접속 (VNC)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-linux-or-mac-desktop-vnc)
- [열린 포트가 없는 머신에 SSH 접속 (OpenSSH)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#ssh-to-a-machine-with-no-open-port-openssh)
- [헤드리스 Raspberry Pi 설정하기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#set-up-a-headless-raspberry-pi)

**다른 사람과 공유하기**

공유는 단순히 고유한 URL이나 QR 코드를 상대방에게 주는 것으로, 이를 통해 접근 권한을 부여합니다. 권한은 맞춤 설정할 수 있으며 몇 분, 몇 시간 등으로 만료되도록 설정할 수 있습니다.

- [파일을 어디에도 업로드하지 않고 공유하기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#share-files-without-uploading-them-anywhere)
- [프로젝트를 누군가에게 보여주기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#show-someone-your-project)
- [만료되는 접근 권한 부여하기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#give-someone-access-that-expires)
- [휴대폰에서 에이전트 세션 확인하기 (Claude Code, tmux)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-agent-session-from-your-phone-claude-code-tmux)
- [다른 사람의 라우터 고치기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#fix-someone-elses-router)

**개발 및 기기**

- [개발 머신에서 데이터베이스 접속 (Postgres, MySQL)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-database-from-your-dev-machine-postgres-mysql)
- [서로를 찾지 못하는 기기 동기화 (Syncthing)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#sync-devices-that-cannot-find-each-other-syncthing)
- [브라우저에서 로봇 보기 (ROS, Foxglove)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-a-robot-from-a-browser-ros-foxglove)

**기법**

- [포워딩 리스너가 노출하는 것](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#what-a-forwarding-listener-exposes)
- [LAN의 다른 머신이 포워드를 사용하게 하기](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#let-other-machines-on-your-lan-use-a-forward)
- [작동하지 않는 것으로 알려진 것](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#known-not-to-work)

## `bitbang` 사용하기

모든 연결에는 두 개의 끝이 있습니다: **리스너**(접속 대상 머신에서 실행되는 `bitbang serve`)와 **커넥터**(접속하는 머신의 브라우저 또는 `bitbang` CLI)입니다. 하나의 리스너 URL이 두 종류의 커넥터를 모두 지원합니다.

### 리스너: `bitbang serve````
bitbang serve                    # everything: shell + proxy + files + forward
bitbang serve shell              # just a terminal
bitbang serve files ~/share      # just a directory (-files-upload to allow uploads)
bitbang serve proxy localhost:8080       # just one web app, straight at the URL
bitbang serve proxy a.lan:80,b.lan:80    # ...or several, chosen in the browser
bitbang serve forward 127.0.0.1:22       # just TCP, for `connect -L`

bitbang serve shell files ~/share proxy nas.lan:8096   # any combination

각각은 QR 코드, URL 및 페어링 코드를 출력합니다. 모드는 리스너가 수행할 수 있는 작업을 결정합니다. serve shell은 전달할 포워딩이 없으며, 포워딩 전용 리스너는 셸을 시작하지 않으므로 권한을 상승시킬 대상이 없습니다.

알아두면 유용한 기본값 하나: 포워딩과 프록시는 리스너가 도달할 수 있는 모든 호스트:포트에 연결할 수 있습니다. 의도한 대상뿐만 아니라, 데이터베이스용으로 배포된 링크는 해당 네트워크의 나머지 부분에도 도달할 수 있습니다. 대상 이름을 단어 뒤에 지정하면 범위가 좁아집니다. forward db.internal:5432는 해당 대상에만 연결되고 다른 곳에는 연결되지 않습니다.

실행 중인 세션 공유: bitbang share

serve shell은 새 셸을 시작합니다. share는 이미 실행 중인 tmux 세션을 게시합니다.``` bitbang share # publish the current tmux session bitbang share --read-only # publish without a control URL bitbang share status|stop|rotate

The command returns after publishing, so `Ctrl-Z`, `bitbang share`, `fg`
works for a task already in progress. Hosting requires tmux 3.2+ on Unix or
WSL. Native Windows clients can open the URLs but cannot host a share.

By default, the command prints two bearer URLs:

- The **Control URL** can type with the same authority as the local keyboard.
  One controller may connect at a time.
- The **View URL** is watch-only. Input is dropped before it reaches tmux, and
  up to `--max-viewers` viewers may connect at once (default 16).

`--read-only` omits the control credential entirely. Viewer and controller
limits are held for each connection's lifetime, even before it opens a shell.

Shares run until stopped by default; `--ttl` sets a lifetime (e.g. `--ttl 1h`).
Share URLs are ephemeral and are never saved to `devices.json`. `share stop`,
TTL expiry, or removal of the source session disconnects remote peers without
stopping the source session.

Re-running `bitbang share` reprints the running share's URLs. If you
pass a flag that disagrees with what is running (say `--read-only`
against a share that has a control URL), it says so rather than
handing back the old URLs; `bitbang share rotate` replaces the share
with one that uses the new flags.

A background worker runs in a detached `_bbshare_*` tmux management session,
so there is no daemon or PID file to manage.

Sharing changes no tmux options. With tmux's default `window-size latest`, the
window follows the active read-write client; a lone viewer still supplies the
only available size. If `window-size` has been overridden, `share` reports it
but does not change the user's configuration.

### Handing out limited access: `bitbang link`

One listener, one URL, and as many **access links** as you need. Each is a
separate code on that same URL, granting a subset of what the listener offers
and optionally lapsing at a fixed time:```
bitbang link edit                # add entries in $EDITOR
bitbang link ls                  # what you have handed out
bitbang link rm <label>          # revoke one
bitbang link qr <label>          # its URL and QR code

An entry is a line of JSON in ~/.bitbang/bitbang/links.json. Write one with no code, reload the listener at its console, and it mints one:```json [ {"label": "ana", "grant": "files", "expires": "2026-09-01T00:00:00Z"}, {"label": "ben", "grant": "files /srv/photos"}, {"label": "dev", "grant": "shell forward 127.0.0.1:5432"} ]

I need the actual content of chunk 11 to translate it. Please provide the Markdown text you'd like translated.```
  0) owner  files forward proxy shell
     https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#_vtQ0JCPe7s
  1) ana    files  expires in 6d
     https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#T-Ty_HhvLfY
  2) ben    files /srv/photos
     https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#L6La8OzBO74
  3) dev    forward 127.0.0.1:5432 shell
     https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#8kmI3LYzB7E

owner는 신원 자체의 코드로, 리스너가 제공하는 모든 것을 부여합니다. 대신 다른 코드 중 하나를 보내세요. 콘솔은 라벨이나 옆에 있는 숫자 중 아무거나 받으므로, rm 2rm ben은 같은 작업을 수행합니다.

grantserve가 받는 단어로 작성되며, 리스너가 이미 제공하는 것만 좁힐 수 있습니다. 즉, 링크는 기능을 선택하는 데 제한되지 않습니다. 공유 폴더의 하위 디렉터리, 전달 대상의 하위 집합, 또는 shell의 단일 명령을 지정할 수 있습니다. grant를 생략하면 링크는 리스너가 제공하는 모든 것을 부여합니다. 리스너의 범위를 벗어난 것을 요청하면 콘솔은 serve가 주는 것과 동일한 메시지로 거부합니다.

라벨은 링크를 식별하는 것이지 그 조건이 아니므로, 두 사람이 동일한 grant와 만료 시간을 가진 링크를 보유해도 다른 하나에 영향을 주지 않고 하나만 취소할 수 있습니다.

취소와 만료는 이미 열려 있는 세션에도 도달합니다. 연결이 닫히고 보유자에게 이유가 전달되며, 조용히 끊기지 않습니다. 그리고 만료된 코드는 일시 중지가 아니라 폐기됩니다. 항목을 갱신하면 새 코드가 생성되므로, 이미 보낸 URL은 계속 죽은 상태로 유지됩니다.

6자리 코드로 페어링

URL을 붙여넣거나 QR 코드를 스캔할 수 없을 때(예: 전화 통화 중이거나 소리 지를 수 있는 거리 안에 있을 때), bitbang serve는 짧은 페어링 코드도 출력합니다. 상대방은 bitba.ng/<code>를 열거나(또는 bitbang connect <code>를 실행), 화면에 두 번째 6자리 숫자가 표시되며, 그 숫자를 다시 읽어서 알려줍니다. 승인하려면 그 숫자를 입력하세요. 중간자 공격은 두 숫자를 일치시킬 수 없으며, 페어링은 다음 번을 위해 장치 연결 자격 증명을 저장합니다(예: bitbang connect nas1). Magic Wormhole을 알고 있다면, 형태가 비슷합니다. 두 머신을 안전하게 소개하는 음성 코드입니다.

서버가 5분짜리 페어링 코드를 출력합니다. 상대방은 bitba.ng에서 이를 입력하고, 화면에 소리 내어 읽을 6자리 챌린지가 표시되며, 서빙 머신에 다시 입력하면 연결이 승인됩니다

자체 TURN 사용

대부분의 연결은 직접 피어 투 피어로 진행됩니다. 양쪽 끝이 홀 펀칭이 되지 않는 NAT 뒤에 있을 때, 트래픽은 릴레이가 필요하며, 기본적으로는 우리의 릴레이를 사용합니다. -ice-servers는 리스너를 자체 서버로 지정합니다:``` bitbang serve -ice-servers ~/turn.json

리스너는 등록 시 신호 서버에 구성을 전달하고, 서버는 연결하는 모든 쪽에 이를 제공합니다. 따라서 양쪽 끝 모두 사용자의 릴레이를 사용하며, 우리 쪽은 전혀 관여하지 않습니다. coturn이든 Cloudflare나 Twilio 같은 호스팅 제공업체든 무엇이든 작동합니다.

파일은 JSON이며, 제공업체가 전달한 다음 세 가지 형태 중 하나를 따릅니다.```json
[{"urls": ["turn:turn.example.net:3478"], "username": "user", "credential": "pass"}]

2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.```json

{"ice_servers": [{"urls": "stun:stun.example.net:3478"}]}

I'm ready to translate the Kitploit tool content from English to Korean. Please provide chunk 19 of 35.```json
{"iceServers": [{"urls": ["turn:turn.example.net:3478"], "username": "u", "credential": "p"}]}

urls는 문자열 또는 목록을 받습니다. usernamecredential은 TURN용이며 STUN 전용 항목에서는 생략할 수 있습니다. 경로는 절대 경로, 상대 경로 또는 ~로 시작하는 경로일 수 있습니다. 파싱되지 않는 파일은 조용히 폴백하는 대신 시작 시 리스너를 중지시킵니다.

세션이 요청 없이 릴레이로 전환되면 bitbang connect는 왜 느린지 궁금해하게 두지 않고 그 사실을 알려줍니다. 리스너는 어느 쪽이든 (via RELAY로) 기록하며, 경로를 진단할 때 -relay / -norelay로 해당 문제를 강제로 지정할 수 있습니다.

짚고 넘어갈 점: 이는 누가 바이트를 운반하는지에 대한 것이지, 누가 읽을 수 있는지에 대한 것이 아닙니다. 릴레이는 우리 것을 포함해 DTLS 암호문만 볼 수 있습니다. 우리가 제공하는 것보다 더 많은 TURN이 필요하면 직접 실행하세요 (현재 시간 제한이 있습니다).

브라우저에서 연결하기

URL을 엽니다. 제공되는 내용에 따라 다음을 얻을 수 있습니다:

  • Shell -- 페이지 내 전체 터미널 (색상, 크기 조정, 복사/붙여넣기).
  • Files -- 탐색, 미리보기, 다운로드 및 업로드.
  • Proxy -- LAN 주소(nas.local, 192.168.1.10:8080, localhost:3000/admin)를 입력하고 로컬에 있는 것처럼 앱을 사용합니다. 로그인, 쿠키, 업로드 및 스트리밍이 모두 작동합니다.

CLI에서 연결하기```

bitbang connect # interactive shell bitbang connect -- tail -f /var/log/syslog # one-shot command bitbang connect -L 15432:db.internal:5432 # local TCP forwarding bitbang connect -L 14450:nas.local:445 -L 15900:[fd00::20]:5900 bitbang cp :/var/log/app.log ./app.log # copy files, scp-style bitbang cp - :/tmp/firmware.bin < firmware.bin # stdin/stdout work too

`-L`는 `ssh -L`처럼 **TCP만** 전달합니다. `-L`은 `-g`를 전달하지 않는 한 `127.0.0.1`에 바인딩되며, `-g`를 전달하면 전달된 포트가 로컬 네트워크에서 접근 가능해집니다. 그리고 그 포트에 도달하는 사람은 누구든 터널이 도달하는 대상에 접근하게 되며, 그 앞에는 BitBang 자격 증명이 없습니다.

리스너는 `bitbang serve forward` 또는 `bitbang serve`가 필요합니다. 기본적으로 `forward` 링크는 의도한 호스트:포트뿐만 아니라 **리스너가 도달할 수 있는 모든 호스트:포트에** 도달하므로, 데이터베이스용으로 배포된 링크는 해당 네트워크의 나머지 부분에도 도달할 수 있습니다. 도달할 수 있는 대상을 지정하여 범위를 좁히세요:```
bitbang serve forward db.internal:5432        # this link reaches one service

모든 성공적인 연결 또는 페어링은 ~/.bitbang/devices.json에 저장되므로, 이후에는 짧은 이름만으로 충분합니다: bitbang connect nas1.

플랫폼 지원

플랫폼당 하나의 바이너리, 런타임 의존성 없음. 아래에 명시된 두 행을 제외하고 모든 곳에서 작동합니다.

LinuxmacOSWindows
셸, 파일, 프록시 (bitbang serve)yesyesyes
TCP 포워딩 (-L)yesyesyes
액세스 링크 -- 부여, 만료, 취소yesyesyes
자체 TURN 사용yesyesyes
6자리 코드로 페어링yesyesyes
리스너 콘솔 (Enter)yesyesyes
bitbang connect, bitbang cpyesyesyes
공유 세션 보기yesyesyes
공유 호스팅 (bitbang share)yesyesno *
연결 중 터미널 크기 조정yesyesno **

* bitbang share는 tmux 세션을 게시하므로 호스팅하려면 tmux가 필요합니다 -- Linux, macOS 또는 WSL. 네이티브 Windows에서도 bitbang connect로 공유 URL을 열 수 있습니다.

** Windows 커넥터는 터미널 크기 조정을 인식하지 못하므로, 원격 셸은 재연결할 때까지 시작 시의 크기를 유지합니다. Unix는 SIGWINCH로 이를 감지하지만, Windows에는 이에 해당하는 기능이 없습니다.

보안

  • 자가 인증 신원. 첫 실행 시 bitbang~/.bitbang/<program>/ 아래에 RSA 키페어를 생성합니다. 장치 UID는 공개 키에서 파생되므로, 장치를 사칭하려면 해당 UID의 두 번째 선이미지를 찾아야 합니다.
  • 비밀은 서버에 닿지 않습니다. 액세스 코드는 URL 프래그먼트(#…)에 있으며, 브라우저는 이를 절대 전송하지 않습니다 -- bitba.ng는 연결을 중개할 뿐, 이를 승인하는 자격 증명을 절대 보지 못합니다.
  • 종단 간 암호화. 모든 트래픽은 WebRTC의 DTLS를 사용합니다. 시그널링 서버는 공개 키, 파생된 UID, 연결 메타데이터만 볼 뿐 -- 데이터는 절대 보지 못합니다. TURN 릴레이가 필요한 경우에도 암호문만 볼 수 있습니다.
  • 검증된 페어링. 코드 페어링에서 소리 내어 읽는 숫자는 짧은 인증 문자열(SAS)로, 협상된 DTLS 지문과 두 개의 커밋된 논스에서 양쪽 끝에서 독립적으로 계산됩니다 -- 지문이 필연적으로 다른 중간자(MITM)는 두 숫자를 일치시킬 수 없습니다.
  • URL은 전달자 자격 증명입니다. 이를 가진 사람은 누구나 당신이 제공하기로 선택한 것 -- serve shell을 실행했다면 셸 -- 을 얻을 수 있습니다. 이에 따라 공유하세요.
  • 선택적 PIN (--pin)은 영구 또는 헤드리스 설정용이며, 일회용 모드 (-ephemeral)는 실행마다 새 신원을 생성합니다.
  • 서버가 여전히 보는 것. 아무것도 아닌 것은 아닙니다. 서버는 소개를 중개하므로 양쪽 끝의 IP 주소, 연결 시점, 교환량을 관찰합니다. 종단 간 암호화는 데이터를 보호하지만, 그 주변의 메타데이터까지는 보호하지 않습니다 -- 최소 신뢰무신뢰보다 더 정확한 표현입니다.
  • 브라우저는 로드한 페이지를 신뢰합니다. 브라우저 클라이언트는 시그널링 서버가 제공하는 JavaScript이므로, URL을 여는 것은 해당 서버가 정직한 코드를 제공한다고 신뢰하는 것을 의미합니다. bitbang connect에는 그러한 의존성이 없습니다: 이는 당신이 설치하고 체크섬을 확인한 바이너리입니다. 그 차이가 중요하다면 CLI로 연결하세요.

양쪽 끝이 서로를 인증하여 시그널링 서버가 연결에 개입할 수 없게 하는 방법은 여기에 자세히 설명되어 있습니다: 무신뢰 시그널링: 중앙 기관 없는 인증.

왜?

  • 열거나 구성할 것이 없습니다. NAT, CGNAT 또는 잠긴 네트워크 뒤에서도 작동합니다 -- 라우터 변경, VPN, 터널 데몬이 필요 없습니다.
  • 연결 측에 설치할 것이 없습니다. 브라우저만으로 충분합니다. 스크립팅, 파이프, 파일 복사가 필요할 때는 CLI가 있습니다.
  • 설계상 프라이빗. 트래픽은 WebRTC/DTLS, 피어 투 피어입니다. 시그널링 서버는 이를 절대 보지 못합니다. 직접 경로가 불가능하면 TURN 릴레이가 암호문만 전달합니다.
  • 계정 없음, 텔레메트리 없음.

그냥 SSH를 쓰면 안 되나요? 아니면 Tailscale?

짧은 답변: 이미 SSH로 접속할 수 있는 머신이거나, 설치할 수 있는 자체 장치 플릿이라면 기존 도구를 계속 사용하세요. bitbang은 상대방이 장치가 아닌 사람일 때, 또는 현재 위치에서 아무것도 설치할 수 없을 때를 위한 것입니다. 두 질문 모두 **FAQ**에서 자세히 다룹니다.

설치```

curl -sSfL bitba.ng/install | sh

Linux 및 macOS. OS와 아키텍처(`amd64`, `arm64`, Linux의 경우 `armv7`)를 감지하여 최신 [GitHub release](https://github.com/richlegrand/bitbang-cli/releases)에서 바이너리를 다운로드하고, 릴리스의 `checksums.txt`와 SHA-256을 대조한 후 `~/.local/bin/bitbang`에 설치합니다.

Windows 빌드는 `bitbang-windows-amd64.exe` 및
`bitbang-windows-arm64.exe`로 게시됩니다. Releases에서 적절한 바이너리를
다운로드하여 `bitbang.exe`로 이름을 바꾸고 `PATH`에 배치하세요.
**소스에서 빌드:** [아래](#building-from-source)를 참조하세요.

**macOS 및 Gatekeeper.** 위의 원라인 설치 명령은 영향을 받지 않습니다. `curl`은
`com.apple.quarantine` 속성을 설정하지 않으므로 가져온 바이너리가 정상적으로
실행됩니다. 대신 브라우저에서 Releases 페이지의 `bitbang-darwin-arm64`를
다운로드하면 macOS가 이를 격리하고 열기를 거부합니다. 릴리스 바이너리는
공증(notarized)되지 않았기 때문입니다. 다음 중 하나로 해제하세요:```
xattr -d com.apple.quarantine ./bitbang-darwin-arm64

또는 Finder에서 파일을 마우스 오른쪽 버튼으로 클릭하고 열기를 선택하면 일회성 재정의가 제공됩니다. 또는 소스에서 빌드하면 격리되지 않습니다.

Windows 및 SmartScreen. Windows에서도 같은 이유로 동일한 현상이 발생합니다. 브라우저 다운로드는 Mark-of-the-Web을 첨부하므로 첫 실행 시 *"Windows에서 PC를 보호했습니다"*가 표시됩니다. 추가 정보를 선택한 다음 그래도 실행을 선택하세요. 릴리스 바이너리는 코드 서명되지 않았으므로 이는 문제가 있다는 신호가 아니라 예상된 동작입니다. curl 또는 PowerShell의 Invoke-WebRequest.exe를 가져오면 첨부되지 않으며, 소스에서 빌드해도 마찬가지입니다.

설치 옵션

버전을 고정하거나, 위치를 변경하거나, 실행 전에 스크립트를 읽어보세요:``` curl -sSfL bitba.ng/install | sh -s -- --version 0.5.0 curl -sSfL bitba.ng/install | sh -s -- --prefix /usr/local/bin

curl -sSfL bitba.ng/install -o install.sh && less install.sh && sh install.sh

릴리스 태그에는 `v` 접두사가 없습니다(`0.5.0`이지 `v0.5.0`이 아닙니다).

### 설치 URL 작동 방식

`bitba.ng/install`은 호스팅된 스크립트가 아니라 리다이렉트입니다. 체인은 다음과 같습니다:

1. `curl`이 `https://bitba.ng/install`에 접속하면, 이 저장소(`main` 브랜치)의 [`install.sh`](https://github.com/richlegrand/bitbang-cli/blob/HEAD/install.sh)로 302 리다이렉트됩니다.
2. 스크립트가 셸에서 실행되어 OS+아키텍처를 감지하고, `https://github.com/richlegrand/bitbang-cli/releases/latest/download/bitbang-linux-<arch>`에서 바이너리 자산을 다운로드합니다.
3. 동일한 릴리스에서 `checksums.txt`를 가져와 바이너리의 SHA-256을 검증합니다.
4. `~/.local/bin`에 설치합니다(재정의 가능).

설치 스크립트는 설치하는 코드와 함께 이 저장소에 있으므로, 바이너리와 함께 검토할 수 있으며, 표준 bitba.ng 호스트는 짧은 URL만 소유합니다. 자체 호스팅 사용자는 자신의 호스트의 `/install`을 배포하는 스크립트로 지정할 수 있습니다: 시그널링 서버의 `INSTALL_URL` 환경 변수가 리다이렉트 대상을 제어합니다(비어 있으면 → 404).

## 명령어 참조

모든 하위 명령어와 플래그는 **[CLI.md](https://github.com/richlegrand/bitbang-cli/blob/HEAD/CLI.md)**에 있으며, `bitbang <command> --help`는 터미널에서 동일한 내용을 출력합니다.

## 소스에서 빌드하기

Go 1.25+ 필요. 순수 Go, 정적 링크(`CGO_ENABLED=0`) -- 간단한 크로스 컴파일, 런타임 의존성 없음.```
go build ./cmd/bitbang/

# cross-compile:
GOOS=linux   GOARCH=arm64        go build -o bitbang-arm64 ./cmd/bitbang/
GOOS=linux   GOARCH=arm GOARM=7  go build -o bitbang-armv7 ./cmd/bitbang/
GOOS=windows GOARCH=amd64        go build -o bitbang.exe   ./cmd/bitbang/
GOOS=darwin  GOARCH=arm64        go build -o bitbang-macos ./cmd/bitbang/

Windows 명령 프롬프트에서:```bat go build -o bitbang.exe .\cmd\bitbang go test .... run_tests.cmd unit

셸 명령, 파일 공유, 프록시, CLI 클라이언트는 Windows에서 지원됩니다.
대화형 브라우저 및 CLI 셸은 Windows ConPTY를 사용하며, 터미널 입력 에코, 줄 편집, VT 출력, 크기 조정 이벤트를 포함합니다. ConPTY는 Windows 10 버전 1809 또는 Windows Server 2019 이상이 필요합니다.

## 다이어그램

<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/47068/d68fcddad62ab84f11a549906a2b5abf2330fb25f39b3c1a1266eac7257a080d.png" alt="bitbang CLI 셸 및 파일 공유" width="760">
  <img src="https://assets.kitploit.com/production/public/readmes/47068/55bb6866c22504a6434e3dee8cb998e747cd73cb9d0bfa5e0bc0ede7b90ce262.png" alt="bitbang CLI 프록시 작동" width="720">  
</p>

## 로드맵

현재 제공 중: **셸, 파일, 프록시** — 브라우저 또는 CLI에서 접근 가능하며, **TCP 포트 포워딩**, scp 스타일 파일 복사, 저장된 장치 테이블을 통한 **임시 페어링**, **터미널 공유**(`bitbang share`), 그리고 URL이 부여하는 권한을 축소하고 만료시키는 **액세스 링크**(`bitbang link`)도 포함됩니다. 설계 완료 및 진행 중:

- **직렬 브리징** — 로컬 가상 포트에서 원격 `/dev/ttyUSB0` 구동 (예: 인터넷을 통해 Arduino IDE 실행). 이슈가 [여기](https://github.com/richlegrand/bitbang-cli/issues/3)에 등록되었습니다.
- **원격 데스크톱** — WebRTC 비디오 트랙을 통한 화면, 데이터 채널을 통한 키보드/마우스.

## 라이선스

MIT — [LICENSE](https://github.com/richlegrand/bitbang-cli/blob/HEAD/LICENSE) 참조.

## 기여

이슈와 PR은 언제나 환영합니다.

레시피는 다릅니다: 레시피는 [bitbang](https://github.com/richlegrand/bitbang) 저장소의 [cookbook](https://github.com/richlegrand/bitbang/blob/main/cookbook.md)에 있으며, 이 프로젝트가 아닌 모든 프로젝트에 걸쳐 있기 때문입니다. 레시피 추가는 해당 저장소에서 PR로 진행됩니다.

*목록에 등재*하는 것은 각 프로젝트별로 별도의 작은 PR이 필요하며, 해당 README에 표시해야 합니다 — 위의 [레시피](#recipes) 목록은 여기에서 수동으로 유지 관리됩니다. 이는 의도적인 것입니다: 각 프로젝트가 자체 독자에게 어떤 레시피를 보여줄 가치가 있는지 결정하며, 모든 README에 모든 레시피를 추가하지 않기 위함입니다.

카테고리