VibeShell Gateway
포트를 열지 않고
사설망 서버에 붙습니다.
Linux 한 대에 한 줄로 설치하면 Tailscale 네트워크 안에서 SSH 프록시가 뜹니다. 공유기와 방화벽은 그대로 둡니다. VibeShell 앱은 그 게이트웨이 주소 하나로 들어갑니다.
curl -fsSL https://www.wevesolutions.co.kr/downloads/gateway/install.sh | bashv0.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:8022 | tailnet 밖에서는 보이지 않음 | 뒤에 있는 SSH 서버 (비밀번호, 키) |
| Direct | tailscale.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사양
| 버전 | 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 으로도 됩니다.