
Claude Code 에이전트를 스마트폰에서 원격 조작하는 구현 — Tailscale SSH + tmux 영속화의 3가지 주의점【2026】
요약
Claude Code와 같은 자율 코딩 에이전트를 스마트폰에서 원격으로 모니터링하고 제어하기 위한 구현 방법을 다룹니다. Tailscale SSH, tmux, ntfy.sh를 활용하여 보안과 연속성을 확보하는 구체적인 가이드를 제공합니다.
핵심 포인트
- Tailscale SSH를 사용하여 포트 개방 없이 안전한 원격 접속 환경 구축
- tmux 세션을 활용하여 SSH 연결 끊김 시에도 에이전트 프로세스 유지
- ntfy.sh를 이용한 에이전트 상태 및 종료 알림 푸시 구현
- iOS 환경의 소켓 동결 문제를 해결하기 위한 Mosh 활용 권장
- ntfy 토픽 보안을 위한 랜덤 문자열 사용 및 보안 주의사항
대상 독자는 Claude Code와 같이 자율적으로 코드를 계속 작성하는 에이전트를 장시간(수 시간~종일) 실행시키고 있으며, 외출 중인 스마트폰에서 상태를 확인하거나 폭주했을 때 긴급 정지시키고 싶은 사람이다.
전제 환경:
- macOS(Sequoia 15.x) 호스트 머신 + Tailscale 1.7x 계열
- iPhone + Blink Shell 혹은 Termius
- tmux 3.4
- 알림은 ntfy.sh (자체 서버도 가능)
이 기사에서는 자율 구현 시스템의 운용 Tips로서, 원격에서 상황을 지켜보기·멈추기라는 운용 측면만을 다룬다. 리포지토리의 내용이나 기사 자동 생성 메커니즘 등에는 다루지 않는다.
- Tailscale SSH를 사용하여 호스트에 포트를 열지 않고 스마트폰에서 SSH 할 수 있는 경로를 만든다.
- tmux로 세션을 서버 측에 고정하여, SSH가 끊겨도 에이전트 프로세스는 계속 살아있도록 한다.
- 비정상 종료·장시간 무응답을 ntfy.sh를 통해 스마트폰으로 푸시 알림한다.
- 3가지 주의점:
SIGHUP,
iOS 잠금 중 소켓 동결, ntfy 공개 토픽 추측 리스크
외부에 포트 22를 열고 싶지 않으므로 Tailscale의 SSH 기능을 사용한다.
# 호스트 측 (Mac)에서 한 번만
sudo tailscale up --ssh
# 스마트폰 측은 Tailscale 앱에서 동일한 계정으로 로그인해 두기만 하면 됨
...
Tailscale 관리 콘솔의 ACL에 ssh 규칙이 없으면 접속이 거부되므로, Access Controls에서 다음과 같이 설정되어 있는지 확인한다.
{
"ssh": [
{
...
에이전트는 tmux 안에서 실행된다. SSH 클라이언트를 닫아도 tmux 프로세스 자체는 서버 측에서 계속 동작한다.
tmux new -d -s agent 'claude --dangerously-skip-permissions "장시간 태스크를 실행"'
# 스마트폰에서 돌아왔을 때
tmux attach -t agent
기동 스크립트 끝에 trap을 심어, 프로세스가 종료되는 타이밍에 알림을 보낸다.
#!/bin/bash
TOPIC="my-agent-xxxxxxxx" # 추측하기 어려운 랜덤한 문자열로 만든다
notify() { curl -s -d "$1" "ntfy.sh/$TOPIC" > /dev/null; }
...
스마트폰 측은 ntfy 앱으로 동일한 토픽을 구독해 두면, 에이전트가 다운된 순간 잠금 화면으로 알림이 도착한다.
tmux를 사용하지 않고 ssh host 'claude ...'와 같이 직접 실행하면, SSH 세션이 끊기는 순간 자식 프로세스에 SIGHUP이 전달되어 함께 종료된다. nohup으로도 일단 방지할 수는 있지만, 중간 경과를 나중에 보고 싶다면 tmux(또는 screen)가 유일한 선택지다. 다시 attach 하면 표준 출력(Standard Output)의 다음 내용을 그대로 볼 수 있다.
iOS는 화면 잠금 후 잠시 지나면 백그라운드 앱의 소켓을 일시 정지한다. TCP 기반의 순수 SSH를 사용하면, 잠금 해제 후 "반응 없음 → 타임아웃으로 재접속"이라는 체감이 좋지 않은 동작이 된다. UDP 기반으로 접속 상태를 유지하는 Mosh를 경유하면, 잠금 해제 후에도 즉시 원래 화면으로 돌아갈 수 있다.
brew install mosh # Mac 측
# iOS 측은 Blink Shell이 Mosh를 지원함
mosh ki@mac-mini.tailnet-xxxx.ts.net
tfy.sh는 기본적으로 인증 없는 공개 서비스이므로, 토픽명이 단순하면 제3자에게 구독되거나 가짜 알림이 전송될 리스크가 있다. 충분히 긴 랜덤 문자열을 토픽명으로 하거나, 액세스 토큰이 포함된 프라이빗 토픽, 혹은 자체 호스트의 ntfy 서버를 사용하는 것이 안전하다.
VPN으로 전체 터널을 구축하는 방법도 검토했으나, 포트 22를 인터넷에 노출시키고 싶지 않다, WireGuard 기반으로 단말별 키 관리를 하고 싶지 않다라는 이유로 Tailscale SSH가 운용 비용이 더 낮았다. ACL만 잘 제한해 두면, 키 배포나 인증서 갱신의 번거로움 없이 액세스 범위를 제어할 수 있다.
- Tailscale SSH + tmux로 "에이전트는 계속 동작함·언제든 들여다볼 수 있음" 상태를 만들 수 있다.
- 순수 SSH만 사용하면
SIGHUP
에 의해 프로세스가 종료되거나, 기기 잠금 시 소켓 동결 (socket freezing) 현상 두 가지로 인해 문제가 발생하기 쉽다. tmux + Mosh를 사용하면 두 문제 모두 해결할 수 있다. - 알림은 ntfy.sh가 간편하지만, 토픽 이름의 추측 저항성 (guessing resistance)은 스스로 보장해야 한다.
- 자율적으로 장시간 동작하는 에이전트일수록 "중단된 것을 알아차리는 메커니즘"이 운영의 생명선이 된다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기