원격 개발 — SSH·Tailscale·VS Code Remote로 다른 머신에서 일하기
노트북에서 데스크톱·홈서버·클라우드 워크스테이션을 매끄럽게 — Tailscale·SSH·VS Code Remote·tmux 통합 셋업.
"강력한 데스크톱은 집에 두고 노트북은 가볍게" 또는 "GPU 워크스테이션을 원격에서 쓰고 싶다" 같은 시나리오. 핵심 도구는 Tailscale (제로컨피그 VPN) + SSH + VS Code Remote-SSH + tmux. 한 번 셋업하면 카페에서도 집 데스크톱 같은 개발 환경.
TL;DR
- Tailscale — NAT/방화벽 우회한 머신 간 사설망. 회사 VPN 없이 양쪽 머신 연결
- SSH — 인증된 후 모든 통신
- VS Code Remote-SSH — 원격 머신의 파일을 로컬 VS Code로 편집 (마치 로컬처럼)
- tmux — 세션 영속화. 연결 끊겨도 작업 그대로
- Mosh (선택) — 모바일 네트워크에서도 안정적인 SSH 대안
사전 조건
- 양쪽 머신에 SSH·계정 + 인터넷
- (선택) 도메인이나 고정 IP는 불필요 — Tailscale이 해결
1. Tailscale 셋업
Tailscale은 WireGuard 기반 메시 VPN. 각 머신에 클라이언트 설치 + 같은 계정 로그인 → 자동으로 사설 IP (100.x.x.x) 부여. NAT 뚫고 직접 연결.
1.1 설치
Mac:
brew install --cask tailscaleWindows:
winget install --id tailscale.tailscaleLinux (Ubuntu):
curl -fsSL https://tailscale.com/install.sh | sh1.2 로그인
각 머신에서:
sudo tailscale up # Mac/Linux
# 또는 GUI 트레이 → Login브라우저 열림 → Google/GitHub/Microsoft 계정 (Tailscale 가입 — 무료 100 디바이스).
1.3 머신 IP 확인
tailscale ip -4
# 100.x.x.x또는 admin.tailscale.com 에서 모든 머신 목록.
1.4 머신 이름 (MagicDNS)
admin 콘솔 → DNS → MagicDNS 활성화. 이제 desktop.tail-scale.ts.net 같은 이름으로 직접 SSH 가능:
ssh me@desktop
# (.tail-scale.ts.net 자동 추가)한 번 켜두면 평생 사설 IP 신경 안 써도 됨. 본 가이드 나머지는
desktop이라는 이름 가정.
2. SSH 준비
2.1 원격 머신에서 SSH 활성화
Mac (원격):
- System Settings → General → Sharing → Remote Login ON
Windows (원격):
- Settings → System → Optional features → OpenSSH Server 설치
- PowerShell (admin):
Set-Service -Name sshd -StartupType Automatic Start-Service sshd
Linux (원격):
sudo apt install openssh-server
sudo systemctl enable --now ssh2.2 SSH 키 등록
로컬 머신의 공개 키를 원격 ~/.ssh/authorized_keys 에 추가:
# 로컬
ssh-copy-id me@desktop
# 또는 수동 — 원격에서:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys2.3 접속
ssh me@desktop
# 또는 100.x.x.x 직접3. VS Code Remote-SSH
Visual Studio Code 안에서 원격 머신의 파일을 로컬 속도로 편집.
3.1 확장 설치
VS Code 확장 마켓:
- Remote - SSH (
ms-vscode-remote.remote-ssh)
또는:
code --install-extension ms-vscode-remote.remote-ssh3.2 연결
VS Code Command Palette (⌘⇧P / Ctrl+Shift+P) → Remote-SSH: Connect to Host → me@desktop 입력.
처음 연결 시 원격에 VS Code Server 자동 설치 (~50MB, 한 번만). 이후 즉시.
3.3 사용
좌측 하단 SSH: desktop 표시. File → Open Folder → 원격의 ~/work/repo 열기. 확장은 원격에 별도 설치 (예: Python 확장은 원격 머신의 Python 환경 사용).
3.4 권장 확장 (원격 설치)
- ESLint / Prettier
- Python / Pylance
- Docker
- (로컬엔 Theme·키맵만 두는 게 깔끔)
4. tmux — 세션 영속화
SSH 연결이 끊겨도 작업 보존:
4.1 설치 (원격)
# Mac/Linux 원격
brew install tmux # Mac
sudo apt install tmux # Ubuntu4.2 사용
ssh me@desktop
tmux new -s work # 세션 시작
# ...일하다가...
# Ctrl+B, D → detach (세션 살아있음)
# 나중에
ssh me@desktop
tmux attach -t work # 다시 붙임4.3 핵심 단축키
단축키 (prefix = Ctrl+B) | 동작 |
|---|---|
prefix + D | detach |
prefix + C | 새 window |
prefix + N / P | 다음/이전 window |
prefix + % | 세로 분할 |
prefix + " | 가로 분할 |
prefix + 화살표 | pane 이동 |
prefix + Z | pane 줌인/아웃 |
4.4 자동 attach
.zshrc (원격):
if [[ -z "$TMUX" && -n "$SSH_CONNECTION" ]]; then
tmux attach -t main || tmux new -s main
fiSSH 접속 시 자동으로 main 세션 시작/재진입.
5. Mosh — 모바일 네트워크에서
이동 중 (5G/와이파이 전환)에 SSH가 자주 끊긴다면 Mosh (Mobile shell). UDP 기반·로컬 에코·끊김 자동 복구.
brew install mosh
# 원격
sudo apt install moshmosh me@desktop자체 SSH 인증 + UDP 60000-61000 포트 사용. Tailscale 통해서는 별도 방화벽 설정 불필요.
6. 시나리오: GPU 워크스테이션 원격
목표: 노트북에서 데스크톱 GPU로 ML 학습.
# 노트북에서
ssh me@gpu-workstation
tmux new -s train
# tmux 안에서
cd ~/projects/ml
python train.py --epochs 100
# Ctrl+B, D 로 detach
# 노트북 닫고 카페로
# 다시 접속
ssh me@gpu-workstation
tmux attach -t train
# 학습 그대로 진행 중VS Code Remote로 편집 + tmux로 학습 실행. 둘이 같이 동작.
7. 보안
Tailscale ACL (선택)
기본은 같은 계정 모든 머신이 서로 접근. 회사·가족이 섞이면 분리:
- admin 콘솔 → ACLs → JSON 정책 작성
- 태그 기반 권한 (
tag:dev,tag:home)
SSH 강화
원격 /etc/ssh/sshd_config:
PasswordAuthentication no # 키만
PermitRootLogin no
AllowUsers me
sudo systemctl restart sshd1Password SSH agent
비밀번호 매니저 참고. Tailscale + 1Password agent 조합이면 passphrase 없이 biometric만으로 SSH.
검증
- 양쪽 머신에서
tailscale status→ "online" 표시 ssh me@desktop→ 즉시 로그인 (passphrase 또는 biometric 한 번)- VS Code Command Palette → Remote-SSH Connect → 파일 편집 + 저장 → 원격에 실제 반영
tmux new -s test→ detach → 다시tmux attach -t test→ 작업 상태 유지mosh me@desktop→ 와이파이 끊고 다른 네트워크로 전환 → 세션 자동 복구
트러블슈팅
Tailscale 연결 안 됨
- 양쪽 머신 모두
tailscale up로그인 완료 - admin 콘솔에서 두 머신 모두 "Connected" 상태
- 방화벽 — Tailscale은 41641/UDP 사용. 회사망에서 막힐 수 있음 (DERP relay로 fallback)
ssh: connect to host 100.x.x.x: Connection refused
- 원격 머신의 SSH 서비스가 안 켜짐 (2.1 다시 확인)
- Windows:
Get-Service sshd가 Running 인지
VS Code Remote 가 느림
- 첫 연결 시 Server 설치 — 한 번만 느림
- 인터넷 경유 (Tailscale Direct 연결 안 됨) —
tailscale ping desktop으로 direct vs DERP 확인
tmux 안에서 컬러 깨짐
.tmux.conf:
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"
Mosh 연결 안 됨
UDP 60000-61000 차단 — 회사망에서 흔함. 이 경우 SSH로 fallback. Mosh는 UDP 필수.
SSH agent forwarding (조심)
원격 머신에서 또 다른 원격으로 SSH 가야 할 때 ssh -A. 다만 원격 머신이 신뢰 가능한 경우만 — 악의적 root가 있다면 키 노출.
참고
- Windows 초기 셋업 / Mac 초기 셋업 — 사전 셋업
- Windows git 인증 / 비밀번호 매니저 — SSH 키 관리
- Tailscale 공식
- VS Code Remote-SSH
- Mosh
변경 이력
- 2026-05-12: 첫 작성. Tailscale·SSH·VS Code Remote·tmux·Mosh + 시나리오·보안 + 트러블슈팅 6종.