소규모 팀 공유 원격 Mac: Apple 화면 공유 + SSH — 지연·세션 선점·권한 격리 검수
이 글은 또 하나의 “SSH vs VNC 총설”이 아닙니다. 이미 macOS 화면 공유(Screen Sharing)로 유리를 보고 SSH로 터미널 레인을 쓰는 팀을 위해, 어떤 포트를 열어야 하는지, 관찰자 모드가 리스크를 어떻게 바꾸는지, 다중 사용자 충돌이 왜 남는지, 표준화 전 수용 검수를 어떻게 찍을지에 집중합니다. 본문 핵심 서술은 약 800–1500자 분량으로 압축했고, 비교표·defaults·방화벽 명령·세션 규범·flock·FAQ로 바로 런북에 붙일 수 있게 구성했습니다. 프로토콜 선형 가이드는 SSH vs VNC 선택 가이드, 순수 SSH 릴레이는 tmux vs VNC 핸드오프 매트릭스를 참고하세요.
시나리오: 화면 공유 + SSH가 기본 레인일 때
2026년에도 소규모 팀은 물리 Mac 한두 대를 풀링하는 경우가 많습니다. 누군가는 Xcode UI·시뮬레이터·클립보드 중심 트리아지가 필요하고, 나머지는 git·로그·헤드리스 빌드·훅을 캘린더 블록을 기다리지 않고 돌리고 싶습니다. 현실적인 분리는 유리(화면 공유)와 셸(SSH)의 병행이며, 둘 다 켜 둔 채로 운영하는 경우가 흔합니다.
조합은 강력하지만 위험합니다. 유리 레인은 독점적으로 느껴지고, 셸 레인은 조용히 백그라운드에서 컴파일합니다. 동일 macOS 사용자 세션에 두 레인이 닿으면 증상은 resource busy보다 “VNC가 끊긴다”처럼 보여 디버깅이 어렵습니다. 검수 단계에서 드라이버/관찰자 역할과 계정 분리를 Runbook에 박아 두세요.
지연·대역폭·방화벽 포트
화면 공유는 프레임버퍼 스트림입니다. 스크롤·투명도·Retina 스케일에서 스파이크가 납니다. SSH는 키스트로크와 텍스트 위주라, 같은 Wi-Fi·메시 VPN에서도 RTT가 높아져도 셸은 비교적 버티지만, 거대한 scp가 같은 터널을 잡아먹으면 인코더와 대역을 싸웁니다.
온콜이 “인코딩 지연”과 “DNS 장애”를 헷갈리지 않도록 런북에 한 줄 비교를 박아 두세요.
| 신호 | 화면 공유(GUI) | SSH(터미널·파일) |
|---|---|---|
| 먼저 아픈 것 | 패킷 손실·지터 → 타일 멈춤·커서 고무줄 현상. | RTT → 에코 지연; 대용량 rsync가 대역을 빼앗음. |
| 가드레일 | p95 RTT 약 80ms 근처까지를 “쾌적한 UI 작업”; ~120ms 넘으면 GUI 독점 슬롯을 짧게 하거나 노드를 지역에 가깝게. | 왕복이 많은 스크립트는 피하고, 대량 복사 동시성을 제한. |
| 문서화할 포트 | 3283/tcp(ARD·화면 공유 제어 경로); 스택에 따라 5900/tcp VNC형 엔드포인트 — VPN이 실제로 노출한 것과 일치시키기. |
22/tcp 원격 로그인(OpenSSH). 메시 ACL로 SSH만 허용·횡 스캔 차단. |
애플리케이션 방화벽 수용 점검(읽기 전용 감사, 스테이징에서 실행)
# 전역 방화벽 상태(관리자)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
# 방화벽이 아는 앱 목록(sshd·화면 공유 헬퍼 spot-check)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps
OS 이미지 갱신 뒤에는 시스템 설정 → 네트워크 → 방화벽 스크린샷을 위키에 다시 붙이세요. 재연결·지연 임계는 안정성·재연결 체크리스트와 맞춥니다.
권한 모델: 콘솔·관찰자·계정 경계
화면 공유는 로그인된 GUI 세계에 붙습니다. 키체인 프롬프트·시뮬 상태·알림 센터는 콘솔에 사람이 있다고 가정합니다. 관찰자(보기 전용)는 사고 복기에 좋지만 두 번째 격리 macOS 좌석은 아닙니다. Fast User Switching과 볼륨 분리를 운영 규율로 보완하지 않으면 여전히 한 데스크톱 맥락입니다.
다른 Unix 사용자로 SSH하면 파일·크론형 자동화 분리가 됩니다. 수용 검수에서 놓치기 쉬운 실패 모드는 “SSH 사용자가 GUI 사용자 워크스페이스를 홈 심볼릭 체인으로 여전히 변형한다”는 점입니다. 캐시·서명 큐도 쪼개세요.
defaults 스냅샷(이미지 변경 전후 diff)
# 화면 공유 도메인(OS 세대마다 키가 다름—업그레이드 후 diff)
defaults read com.apple.ScreenSharing 2>/dev/null || echo "com.apple.ScreenSharing plist 없음"
# 원격 관리 / ARD 정책(관리 빌더에 흔함)
sudo defaults read /Library/Preferences/com.apple.RemoteManagement 2>/dev/null || echo "RemoteManagement plist 없음"
세션 규범(핸드북에 그대로 붙여넣기)
- 접속 전 채팅에 드라이버 vs 관찰자를 선언; 관찰자는 알림을 끕니다.
- 공유 GUI 계정에서 임시
sudo설치 금지 — 이미지·MDM 도구만. - 자동화 계정은 GUI 비접속: CI 사용자에 “잠깐 화면 공유” 금지.
- 화면 공유 비밀번호·VNC 자격은 SSH 호스트 키와 같은 캘린더로 로테 — 점프 호스트·SSH 인증서 로테이션 매트릭스.
동시 빌드 락과 데스크톱 핸드오프 연계
GUI와 SSH 동시성은 CPU만이 아니라 워크플로 락 문제입니다. SSH 둘이 flock으로 나무를 직렬화해도, 화면 공유 한 명과 SSH의 CI가 Xcode 캐시·시뮬 런타임·codesigning을 같이 건드리면 명시적 직렬화 없이 부딪칩니다.
파괴적 러너 최소 패턴:
flock -n /var/tmp/meshmac-nodeA.codesign.lock -c '/usr/local/bin/build_release.sh'
티켓 범위 자동화·Jira에 보이는 락 문구는 Jira Automation 빌드 락 매트릭스와 사람의 “지금 데스크톱 잡음” 창을 같은 정책 언어로 맞추세요. 큐가 모호하면 프로토콜을 더 얹기 전에 노드를 쪼개는 편이 빠릅니다.
비교·트러블슈팅 FAQ
Q. 화면은 붙는데 CI가 시작되면 바로 끊깁니다.
CI가 화면 공유로 보이는 같은 사용자 세션에서 GPU 집약 UI 테스트를 돌리는지 확인하세요. 계정을 나누거나 UI 테스트 전용 호스트로 옮깁니다. VPN MTU 클램프와 대용량 SSH 전송이 인코더를 굶기는지도 봅니다.
Q. 관찰자도 키체인 팝업의 비밀을 보나요? 감사에 충분한가요?
관찰자를 신뢰 내부자로 두거나 프롬프트를 가립니다. 규제 코드는 상시 관찰 대신 편집된 녹화 클립을 검토하는 편이 낫습니다.
Q. 방화벽 켠 상태에서 SSH만 되고 화면 공유는 검은 화면입니다.
sshd만 인바운드 허용되어 screensharingd·ARD 바이너리가 막힌 전형입니다. OS 패치 후 socketfilterfw --listapps를 다시 돌리세요. Apple이 헬퍼 분류를 바꾸는 경우가 있습니다.
Q. 맥 한 대에서 대화형 데스크톱을 둘이 동시에 쓰고 싶습니다.
Apple 기본 제품으로 GPU 콘솔 둘을 완전 분리하기는 어렵습니다. 현실적 해법은 좌석 추가, 명시적 락·헤드리스 SSH 레인으로 타임슬라이스, 또는 VDI식 분리를 기대하지 않기입니다.
연장 읽기: tmux 세션 격리, 풀 FAQ·쿼터·충돌 체크리스트, SSH·VNC 권한 격리 FAQ.
다음 단계·CTA
표준화 전에 스테이징 노드에서 위 표·명령·세션 규범을 한 번에 통과시키세요. 전용 원격 Mac이 필요하면 공개 플랜을 로그인 없이 확인하고, 도움말·홈·블로그 목록으로 이어가면 됩니다.
조합을 표준에 올리기 전에 검수하세요
포트·관찰자·계정·락을 YAML이나 위키 한 장에 고정하고, Meshmac에서 노드·플랜을 비교합니다.