공유 원격 Mac: tmux/screen SSH 릴레이 vs 독점 VNC
소규모 팀이 한 대의 Mac을 넘겨 받으며 쓸 때, 논쟁은 “SSH냐 VNC냐”보다 동시에 무엇을 공유하는가에 가깝습니다. tmux/screen으로 끊김 없는 셸을 유지하는 다중 attach 릴레이와, 한 명이 화면을 독점하는 VNC는 입력 지연·세션 선점·클립보드·codesign·시뮬 같은 그래픽 요구에서 완전히 다른 트레이드오프를 만듭니다. 본문 핵심 서술은 약 800–1500자 분량으로 압축했고, 아래 비교표·ssh/tmux 실행 스니펫·flock 자리잠금·권한 격리 검수 체크리스트로 바로 운영에 옮길 수 있게 구성했습니다. Apple 화면 공유 + SSH 포트·관찰자·GUI 충돌 검수는 화면 공유 + SSH 체크리스트로 이어서 읽으세요. 배경은 SSH vs VNC 선택 가이드와 tmux 세션·격리 매트릭스를 함께 보세요.
릴레이 vs 독점: 두 운영 모델
SSH+tmux/screen 릴레이는 동일 세션을 순차적으로 넘겨 받아 긴 빌드·대화형 스크립트를 이어 갑니다. 네트워크가 끊겨도 서버 측 프로세스는 살아 있고, 재접속은 attach로 복귀합니다. 반면 독점 VNC는 macOS GUI 세션 하나를 점유합니다—Xcode 창·시뮬레이터·시스템 프롬프트를 “지금 쓰는 사람” 기준으로 직렬화하기 쉽지만, 압축·비디오 인코딩 때문에 입력·스크롤 지연이 RTT보다 크게 느껴질 수 있습니다. SSH는 텍스트 위주에서 지연이 안정적이나, 동일 tmux 세션에 둘이 붙으면 키 입력이 서로 섞이는 형태의 선점이 발생합니다. 운영팀은 “한 세션=한 담당자”를 Runbook에 박아 두는 편이 안전합니다.
screen은 레거시 호환·간단한 detach에 유리하고, tmux는 창·팀 규칙·플러그인 생태가 낫습니다. 선택은 팀 표준 하나로 고정하세요. 권한·키체인·공유 디렉터리 경계는 SSH·VNC 공유 빌드 권한 격리 FAQ와 맞춥니다.
비교표: 세션 선점·클립보드·GUI·인증서·sudo
| 관점 | SSH + tmux/screen 다중 릴레이 | 독점 VNC(단일 GUI 세션) |
|---|---|---|
| 세션 선점 | 동일 세션 attach 시 입력·커서 공유 → 사실상 한 명만 안전 | 한 데스크톱 점유; 동시 사용자는 대기 또는 별도 계정 |
| 클립보드 | 터미널 OSC52·리다이렉트로 텍스트 위주; 바이너리는 불편 | 로컬↔원격 클립보드 동기가 자연; 정책·유출 주의 |
| 그래픽 요구 | 헤드리스 빌드·CLI 적합; 시뮬/GUI는 X11 전 forwarding 등 별도 | Xcode·시뮬·서명 대화형에 적합; 대역·지연 비용 |
| SSH 인증서 | Host CA·ssh-ed25519-cert로 기기별 짧은 TTL 권장 |
VNC 터널도 결국 SSH/VPN 위에 얹는 경우가 많음—동일 신뢰 경로 |
| sudo 정책 | 배포 계정은 NOPASSWD 최소화; 타임스탬프 타임아웃 짧게 | GUI에서 sudo 프롬프트가 팀 전체를 블로킹하기 쉬움—별도 관리자 창 |
VNC “독점”은 동시에 두 명이 같은 Finder/Xcode를 쓰지 않겠다는 운영 규칙이지, 자동으로 파일 락이나 키체인 분리를 주지는 않습니다.
지연·동시 충돌 신호
- p95 입력 지연이 VNC에서 체감상 SSH 대비 두 배 이상이면, 텍스트 작업은 SSH로 분리하고 GUI만 VNC로 씁니다.
- 동시 충돌: 동일
DerivedData·시뮬 UUID·공유/tmp스테이징이 겹치면 “세션 방식”과 무관하게 깨집니다—경로·계정을 먼저 쪼개세요. - 권한: CI 계정이 사람의 tmux 소켓 경로에 들어가면 감사가 불가능합니다. 소켓은
0700, 빌드 루트는 그룹+2770패턴을 검수합니다.
ssh / tmux 실행 스니펫
클라이언트 ~/.ssh/config에 재접속·멀티플렉스를 고정합니다.
Host shared-mac-build
HostName your-mac.meshmac.example
User build
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ServerAliveInterval 30
ServerAliveCountMax 4
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
서버 측 ~/.tmux.conf 최소 예시(팀 베이스라인).
set -g mouse on
set -g history-limit 50000
set -g aggressive-resize on
setw -g allow-passthrough on
set -g set-clipboard on
세션 생성: tmux new -s ticket-OPS-2048 — 무제목 세션 금지. screen -S ticket-OPS-2048도 동일 정신으로 이름을 강제하세요.
자리잠금: 인간용 “점유”를 flock으로
“지금 VNC 쓰는 사람”과 별개로, SSH에서 긴 작업을 돌릴 때 협력적 advisory 락으로 자리를 표시합니다. 락 파일은 공유 볼륨이 아닌 노드 로컬에 두어 NFS 지연으로 인한 오탐을 줄입니다.
LOCK=/var/tmp/meshmac-human-seat.lock
exec 9>"$LOCK"
if ! flock -n 9; then
echo "다른 담당자가 seat 락을 잡았습니다. Slack #build에서 핸드오프 후 재시도."
exit 1
fi
tmux attach -t ticket-OPS-2048 || tmux new -s ticket-OPS-2048
만료·정리·CI와의 공존은 저장소의 빌드 큐·flock FAQ 글과 flock -w 상한을 같은 Runbook에 적어 두세요.
권한 격리·동시성 검수 체크리스트
- ☐ CI용 OS 계정과 인간용 계정 분리; 공유 그룹은 최소 디렉터리만
- ☐ tmux 세션명=티켓·레인 규칙 문서화; 익명 세션 주간 정리
- ☐ VNC 점유 시간 상한·Handoff 슬랙 이모지 규칙
- ☐ SSH Host CA 또는 키 로테이션 Runbook; jump 호스트는 별도 인증서 로테이션 체크리스트와 주기 정렬
- ☐ sudoers: 명령 화이트리스트·짧은 타임스탬프 타임아웃·감사 로그 샘플링
- ☐ codesign·키체인 대화형이 월 N회 이상이면 GUI 전용 노드 분리 검토
요약·CTA
요약: 다중 SSH 릴레이는 끊김·자동화에 강하고, VNC 독점은 GUI·서명 대화형에 강합니다. 둘 다 동일 사용자면 동일 파일이므로 선점 규칙·flock·계정 분리가 실제 안전장치입니다.
홈(로그인 불필요) · 요금·구매 · 도움말 · 협업·운영 블로그
릴레이와 VNC를 Runbook 한 장에
SSH 세션 표준·VNC 점유 규칙·seat flock 경로를 YAML이나 위키에 고정하고, 노드가 부족하면 분리 임대를 검토하세요.