← VibeShell

VibeShell Gateway

포트를 열지 않고
사설망 서버에 붙습니다.

Linux 한 대에 한 줄로 설치하면 Tailscale 네트워크 안에서 SSH 프록시가 뜹니다. 공유기와 방화벽은 그대로 둡니다. VibeShell 앱은 그 게이트웨이 주소 하나로 들어갑니다.

curl -fsSL https://www.wevesolutions.co.kr/downloads/gateway/install.sh | bash

v0.1.0 · Linux, macOS · 무료

공유기에 구멍을 내지 않습니다.

집이나 회사 사설망의 서버에 폰에서 들어가는 방법은 셋입니다. 게이트웨이는 셋 중 인터넷에 여는 포트가 없는 쪽입니다.

포트 포워딩배스천 경유VibeShell Gateway
필요한 것공유기 설정 권한, 고정 IP 또는 DDNS배스천 서버와 그 계정Linux 한 대, Tailscale 계정(무료)
열리는 포트공유기의 22 (인터넷에 노출)배스천의 22없음. tailnet 안에서만 8022
앱 설정호스트, 포트배스천 계정 + 대상 서버게이트웨이 주소 하나
설치없음없음한 줄. 바이너리 하나, 설정 파일 하나

설치 스크립트가 하는 일 그대로입니다.

바이너리를 받아 /usr/local/bin 에 두고, 설정 파일을 만들고, systemd 서비스를 등록합니다. 아래는 스크립트가 찍는 줄과 만드는 파일의 원문입니다.

install.sh 출력 (Linux)

[INFO] 플랫폼: linux/amd64
[INFO] 다운로드: …/downloads/gateway/vibeshell-gateway-linux-amd64
[OK] 다운로드 완료
[INFO] 설치: /usr/local/bin/vibeshell-gateway
[OK] 바이너리 설치 완료
[INFO] 설정 디렉토리 생성: /etc/vibeshell-gateway
[OK] 설정 파일 생성: /etc/vibeshell-gateway/gateway.yaml
[WARN] tailscale.auth_key를 설정하세요 (Tailscale Admin Console에서 생성)
[INFO] systemd 서비스 등록
[OK] systemd 서비스 등록 완료

[OK] VibeShell Gateway 설치 완료!
[INFO] 다음 단계:
  1. 설정 편집: sudo vi /etc/vibeshell-gateway/gateway.yaml
  2. Tailscale auth key 설정
  3. 게이트웨이 시작: vibeshell-gateway -config /etc/vibeshell-gateway/gateway.yaml start
[INFO] 헬스체크: curl http://localhost:8080/health

버전 확인

$ vibeshell-gateway -version
VibeShell Gateway v0.1.0 (built 2026-03-28T03:14:39Z)

/etc/vibeshell-gateway/gateway.yaml (스크립트가 만드는 그대로. auth, allowed_users, metadata_only 는 아직 코드가 읽지 않습니다)

# VibeShell Gateway 설정
# 문서: https://github.com/vibeshell/vibeshell-gateway

server:
  listen: ":8022"
  health_listen: ":8080"
  max_connections: 100
  idle_timeout: 300s

tailscale:
  enabled: true
  hostname: "vibeshell-gateway"
  auth_key: ""
  state_dir: "/var/lib/vibeshell-gateway/tsnet-state"

auth:
  pairing_timeout: 300s
  token_ttl: 24h
  refresh_window: 1h

targets:
  - name: local-ssh
    host: localhost
    port: 22
    description: "로컬 SSH 서버"
    allowed_users:
      - "*"

logging:
  level: info
  format: text
  output: stdout
  metadata_only: true

서비스는 권한을 올리지 않습니다.

systemd 유닛에 NoNewPrivileges 와 ProtectSystem=strict 가 들어 있습니다. 게이트웨이가 쓸 수 있는 디렉터리는 /var/lib/vibeshell-gateway 하나입니다.

/etc/systemd/system/vibeshell-gateway.service

[Unit]
Description=VibeShell Gateway - SSH Proxy Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/vibeshell-gateway -config /etc/vibeshell-gateway/gateway.yaml start
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

# 보안 설정
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/vibeshell-gateway

[Install]
WantedBy=multi-user.target

누가 들어올 수 있는지는 모드가 정합니다.

모드어떻게누가 닿나누가 인증하나
Tailscale (기본)tsnet 이 게이트웨이를 tailnet 노드로 올린다. 주소 hostname.tailnet.ts.net:8022tailnet 밖에서는 보이지 않음뒤에 있는 SSH 서버 (비밀번호, 키)
Directtailscale.enabled: false. 그냥 :8022 에서 받는다그 포트에 닿는 누구나뒤에 있는 SSH 서버 (비밀번호, 키)

아직 없는 것을 적어 둡니다.

  • 게이트웨이 자체 인증과 페어링. gateway.yaml 의 auth 와 access_control 은 자리만 있고 코드가 읽지 않습니다. 인증은 뒤에 있는 SSH 서버가 하던 대로 합니다.
  • targets 의 allowed_users 와 logging 의 metadata_only 도 마찬가지로 아직 동작하지 않습니다. 로그는 접속 메타데이터만 남깁니다.
  • 여러 대상 서버 라우팅. 지금은 targets 의 첫 항목 하나로 갑니다.
  • 중계 서버. 우리 서버는 없습니다. 트래픽은 내 tailnet 안에서 내 게이트웨이와 내 SSH 서버 사이만 오갑니다.

가격

무료입니다. 바이너리는 우리 릴리스 서버에서 받고, 실행은 내 서버에서 합니다. 우리가 운영하는 것은 없습니다.

앱에서는 주소 하나만 넣습니다.

VibeShell 앱의 설정 › 게이트웨이 › 게이트웨이 추가에서 주소를 넣습니다. 형식은 호스트:포트이고, 포트는 gateway.yaml 의 server.listen 과 같습니다. 인증 키 칸은 아직 쓰지 않으니 비워 둡니다.

주소 예

vibeshell-gateway.tail1234.ts.net:8022
100.64.1.10:8022

설정 키와 문제 해결 (가이드)/VibeShell Hook

사양

버전v0.1.0 (2026-03-28 빌드)
호스트Linux (amd64, arm64), macOS (Apple Silicon, Intel). Linux 는 systemd 서비스로 등록
필요한 것root 또는 sudo, Tailscale 계정과 auth key, 뒤에 SSH 서버
포트8022 (SSH 프록시), 8080 (헬스체크). 둘 다 외부 개방 불필요
스택Go, tailscale.com v1.58.2 (tsnet), zap 로거
설정/etc/vibeshell-gateway/gateway.yaml. -config 로 다른 경로 지정
크기linux-amd64 32.0 MB, linux-arm64 30.1 MB, darwin-arm64 18.6 MB, darwin-amd64 19.8 MB
시험3개

자주 받는 질문 셋

Tailscale 없이도 됩니까?

tailscale.enabled: false 로 두면 Direct 모드로 :8022 에서 그냥 받습니다. 사무실 내부망처럼 이미 닿는 네트워크에서 쓰는 용도입니다. 인터넷에 그 포트를 열면 게이트웨이가 아무도 막지 않으니 그렇게는 쓰지 마세요.

Mac 을 게이트웨이로 써도 됩니까?

darwin 바이너리가 있어 실행은 됩니다. 다만 install.sh 의 systemd 등록은 Linux 에서만 하고, Mac 은 직접 실행하거나 launchd 를 따로 잡아야 합니다. 상시 켜 두는 Linux 한 대를 권합니다.

잘 떠 있는지 어떻게 봅니까?

curl http://localhost:8080/health 가 status, version, uptime, active_connections, tailscale_enabled, tailscale_hostname 을 JSON 으로 돌려줍니다. tailnet 안이면 hostname.tailnet.ts.net:8080 으로도 됩니다.

직접 받기