Tailscale + SSH로 아이폰에서 맥 원격 접속하기: Claude Code 모바일 개발 환경 구축

스마트폰 하나로 언제 어디서나 맥에 접속해서 Claude Code로 개발하는 방법. Tailscale VPN과 SSH 키 인증 설정 가이드.

1. 문제 상황

왜 스마트폰에서 개발하려고 하는가?

출퇴근 시간, 카페, 소파에서 갑자기 아이디어가 떠오를 때가 있습니다. 노트북을 꺼내기엔 번거롭고, 메모만 해두자니 나중에 컨텍스트가 사라집니다.

Claude Code를 사용하면 자연어로 코드를 작성할 수 있는데, 이걸 스마트폰에서 할 수 있다면?

목표

  • 아이폰에서 집/사무실 맥에 원격 접속
  • Claude Code 실행하여 개발 작업 수행
  • 보안은 유지하면서 편리하게

요구사항

1. 공유기 포트포워딩 없이 (보안 위험)
2. 고정 IP 없이 (비용 발생)
3. 비밀번호 입력 최소화 (편의성)
4. VPN 수준의 보안

2. 원인 분석 (왜 Tailscale인가)

일반적인 원격 접속 방법들의 문제점

방법 문제점
공유기 포트포워딩 SSH 포트(22)가 인터넷에 노출, 브루트포스 공격 위험
고정 IP 비용 발생, 여전히 보안 위험
TeamViewer/AnyDesk 무료 플랜 제한, 느림, GUI 기반
클라우드 IDE 로컬 파일 접근 불가, 환경 설정 번거로움

Tailscale의 장점

✓ WireGuard 기반 암호화 (군사급 보안)
✓ NAT 통과 자동 처리 (포트포워딩 불필요)
✓ 개인용 무료 (100대 기기까지)
✓ 설정이 매우 간단
✓ 속도 저하 거의 없음

Tailscale은 각 기기에 100.x.x.x 형태의 사설 IP를 할당합니다. 이 IP는 Tailscale 네트워크에 연결된 기기끼리만 통신할 수 있어서, 인터넷에 직접 노출되지 않습니다.


3. 해결 방법

전체 아키텍처

┌─────────────────┐         ┌─────────────────┐
│   iPhone        │         │   Mac           │
│   (Termius)     │◄───────►│   (SSH Server)  │
│   100.x.x.10    │ 암호화  │   100.x.x.20    │
└─────────────────┘  터널   └─────────────────┘
         │                           │
         └───────┬───────────────────┘
                 ▼
        Tailscale Network
        (WireGuard 암호화)

Step 1: Tailscale 설치 및 계정 설정

맥에서:

# Homebrew로 설치
brew install --cask tailscale

또는 tailscale.com/download에서 직접 다운로드

아이폰에서:

App Store에서 "Tailscale" 검색 후 설치

중요: 양쪽 모두 같은 계정으로 로그인해야 합니다. Google, Microsoft, GitHub 등 소셜 로그인을 지원합니다.

Step 2: 맥 SSH 서버 활성화

GUI 방법:

시스템 설정 → 일반 → 공유 → 원격 로그인 (켬)

CLI 방법:

# SSH 상태 확인
sudo systemsetup -getremotelogin

# 결과: Remote Login: Off 이면 활성화 필요
# SSH 활성화
sudo systemsetup -setremotelogin on
# 활성화 확인
sudo lsof -i :22

# 결과에 sshd가 보이면 정상
# COMMAND   PID USER   FD   TYPE  ...
# sshd      123 root    3u  IPv4  ...  TCP *:ssh (LISTEN)

Step 3: 맥 방화벽 확인 및 설정

GUI 방법:

시스템 설정 → 네트워크 → 방화벽 → 켬

CLI 방법:

# 방화벽 상태 확인
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

# 비활성화 상태면 활성화
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on

방화벽을 켜도 "원격 로그인"이 활성화되어 있으면 SSH 접속은 허용됩니다.

Step 4: Tailscale IP 확인

맥 상단 메뉴바에서 Tailscale 아이콘 클릭:

┌─────────────────────────┐
│ Tailscale      Connected│
├─────────────────────────┤
│ This device             │
│ 100.x.x.x         📋    │  ← 이 IP를 기억
├─────────────────────────┤
│ My devices              │
│ └─ iPhone     100.x.x.x │
└─────────────────────────┘

또는 CLI로 확인:

# Tailscale IP 확인
tailscale ip -4

# 출력 예: 100.64.0.1

Step 5: 아이폰 터미널 앱 설치

추천 앱:

가격 특징
Termius 무료/유료 SSH 키 관리, 동기화, UI 우수
Prompt 3 유료 네이티브 iOS 앱, 안정적
a]Shell 무료 기본 기능 충실

이 글에서는 Termius를 사용합니다 (SSH.id 기능 때문).

Step 6: SSH 접속 테스트 (비밀번호 방식)

Termius 설정:

Host 추가:
├─ Label: My Mac
├─ Hostname: 100.x.x.x     ← Tailscale IP
├─ Port: 22
├─ Username: myusername    ← 맥 사용자 이름 (whoami로 확인)
└─ Password: ********      ← 맥 로그인 비밀번호

주의: Username은 맥의 사용자 이름입니다. SSH.id 계정 이름이 아닙니다!

# 맥 사용자 이름 확인
whoami
# 출력 예: myusername

접속 테스트:

Termius → 저장한 호스트 탭 → 연결

Step 7: SSH 키 인증 설정 (비밀번호 생략)

매번 비밀번호 입력은 번거롭습니다. SSH 키 인증을 설정하면 Face ID/Touch ID만으로 접속할 수 있습니다.

SSH 키 알고리즘 비교

알고리즘 특징 권장
ED25519 빠름, 짧은 키, 높은 보안, 널리 지원 O (일반 권장)
ECDSA-SK 하드웨어 보안 키(FIDO2) 필요, Passkey 지원 O (보안 최우선)
RSA 레거시, 긴 키, 호환성 좋음
ECDSA ED25519보다 느림 X

ECDSA-SK는 YubiKey나 기기 내장 보안 키(FIDO2/Passkey)를 사용하는 방식입니다. 아이폰의 경우 Face ID/Touch ID가 Passkey 역할을 합니다.

방법 A: Termius의 SSH.id 사용 (권장)

SSH.id는 Termius에서 제공하는 SSH 키 관리 서비스입니다. ECDSA-SK(Passkey) 방식을 사용하며, SSH 접속 시 Face ID/Touch ID 인증이 필요합니다.

  1. Termius 앱 → Keychain → SSH.id 설정
  2. sshid.io/myid 형태의 페이지가 생성됨
  3. 해당 페이지에서 공개키 확인 가능

공개키는 유출되어도 안전한가요?

네, 공개키는 공개해도 안전합니다. 이름이 "공개"키인 이유입니다. 개인키(private key)만 보호하면 됩니다. SSH.id URL이 공개되어도 보안 문제 없습니다.

맥에서 공개키 등록:

# .ssh 디렉토리 생성 (없으면)
mkdir -p ~/.ssh

# SSH.id 공개키 자동 등록 (myid는 본인 SSH.id 사용자명으로 변경)
curl -fs https://sshid.io/myid >> ~/.ssh/authorized_keys

# 권한 설정 (보안상 필수)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 등록 확인
cat ~/.ssh/authorized_keys

# 출력 예:
# ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTIt...
# #ssh.id - @myid

Termius 호스트 설정 업데이트:

Host 편집:
├─ Username: myusername   ← 맥 사용자 이름 (SSH.id 이름 아님!)
├─ Key: SSH.id 선택       ← Password 대신
└─ 저장

흔한 실수: Username에 SSH.id 사용자명을 입력하면 Authentication failed 에러 발생. 반드시 맥 사용자 이름을 입력해야 함.

방법 B: 수동 SSH 키 생성 (ED25519)

# Termius Keychain에서 키 생성
# Settings → Keychain → + → Generate Key
# Key Type: ED25519 선택
# 공개키 복사 후 맥에서:
echo "ssh-ed25519 AAAA... your-key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

SSH.id Passkey의 보안 이점

SSH.id(ECDSA-SK)를 사용하면 SSH 접속 시 Face ID/Touch ID 인증이 필요합니다.

호스트 탭 → Face ID 인증 → SSH 접속

보안 이점:

  • 키가 아이폰에 바인딩됨 (다른 기기에서 사용 불가)
  • 키 사용 시 생체 인증 필요
  • 폰을 잃어버려도 Face ID 없이는 SSH 접속 불가

기존 SSH 키 + Passphrase 조합의 보안을 생체 인증으로 대체한 방식입니다.

Step 8: Claude Code 실행

SSH 접속 후:

# 작업 디렉토리로 이동
cd ~/Projects/my-app

# Claude Code 실행
claude

# 또는 특정 프롬프트로 시작
claude "현재 프로젝트 구조 설명해줘"

4. 핵심 개념 정리

보안 레이어 비교

항목 공개 SSH Tailscale + SSH
네트워크 노출 인터넷 전체 Tailscale 기기만
암호화 SSH 단일 WireGuard + SSH 이중
인증 비밀번호/키 Tailscale 계정 + SSH
포트 스캔 취약 불가능

Tailscale IP 체계

100.64.0.0/10 (CGNAT 대역)
├─ 100.64.0.0 ~ 100.127.255.255
└─ 각 기기에 고유 IP 할당
   ├─ Mac: 100.x.x.1
   ├─ iPhone: 100.x.x.2
   └─ iPad: 100.x.x.3

SSH 인증 방식 비교

방식 보안 편의성 권장
비밀번호 낮음 낮음 X
SSH 키 (ED25519) 높음 높음 O
SSH 키 + Passphrase 매우 높음 중간 O
ECDSA-SK (Passkey) 매우 높음 높음 O (권장)

5. 베스트 프랙티스

보안 체크리스트

□ Tailscale 로그인 계정 2FA 활성화 (Google/GitHub 등)
□ SSH 키 인증 사용 (비밀번호 인증 대신)
□ Termius 앱 PIN/Face ID 잠금 설정
□ 맥 방화벽 활성화
□ 정기적으로 authorized_keys 검토

추가 보안 강화 (선택)

SSH를 Tailscale 인터페이스로만 제한

기본적으로 "원격 로그인"을 켜면 모든 네트워크 인터페이스에서 SSH 접속이 가능합니다. 즉, 같은 와이파이에 연결된 다른 기기에서도 SSH 접속 시도가 가능합니다.

이를 Tailscale 인터페이스로만 제한하면:

✓ Tailscale 네트워크를 통해서만 SSH 접속 가능
✗ 같은 와이파이의 다른 기기 → 접속 불가
✗ 로컬 네트워크 스캔 → SSH 포트 안 보임

설정 방법:

# /etc/ssh/sshd_config 편집
sudo nano /etc/ssh/sshd_config

# 아래 라인 추가/수정 (100.x.x.x는 본인 맥의 Tailscale IP)
ListenAddress 100.x.x.x
# SSH 서비스 재시작
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd

비밀번호 인증 완전 비활성화

SSH 키 인증만 허용하고 비밀번호 로그인을 막습니다. 이는 맥의 SSH 서버 설정이며, Tailscale이나 Termius와는 무관합니다.

효과:

  • SSH 키가 없으면 접속 불가 (비밀번호 알아도 소용없음)
  • 브루트포스 공격 완전 차단

설정 방법:

# /etc/ssh/sshd_config 편집
sudo nano /etc/ssh/sshd_config

# 아래 라인 추가/수정
PasswordAuthentication no
PubkeyAuthentication yes
# SSH 서비스 재시작
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd

주의: SSH 키가 제대로 등록되어 있는지 확인 후 설정하세요. 키 없이 비밀번호 인증을 끄면 SSH 접속이 완전히 막힙니다.


6. FAQ

Q: Connection refused 에러가 발생해요

A: 맥의 SSH 서버가 비활성화 상태입니다. sudo systemsetup -setremotelogin on 명령어로 활성화하세요.

Q: Authentication failed (publickey) 에러가 나와요

A: 두 가지 확인이 필요합니다:

  1. Username이 맥 사용자 이름인지 (SSH.id 계정명 아님)
  2. 공개키가 ~/.ssh/authorized_keys에 제대로 등록되었는지

Q: Tailscale 연결이 자꾸 끊어져요

A: 아이폰 설정 → Tailscale → "백그라운드 앱 새로 고침" 활성화.

Q: 집 밖에서도 접속되나요?

A: 네. Tailscale은 NAT를 자동으로 통과합니다. 맥이 인터넷에 연결되어 있고 Tailscale이 실행 중이면 전 세계 어디서든 접속 가능.

Q: 무료로 사용할 수 있나요?

A: 개인용으로 100대 기기까지 무료입니다. 대부분의 개인 사용자에게 충분합니다.

Q: 공개키가 유출되면 위험한가요?

A: 아니요. 공개키는 말 그대로 "공개"해도 안전합니다. 개인키(private key)만 보호하면 됩니다. SSH.id URL이 알려져도 보안 문제 없습니다.

Q: ECDSA-SK와 ED25519 중 뭘 써야 하나요?

A:

  • ED25519: 범용적, 대부분의 상황에 적합
  • ECDSA-SK (Passkey): Face ID/Touch ID 기반 생체 인증. Termius SSH.id 사용 시 이 방식. 보안과 편의성 모두 우수

7. 참고 자료