Wendov1.0 · iOS & Android
한국어

가이드

폰에서 Mosh와 SSH 비교: 에이전트를 따라가려면 무엇을 쓸까

Claude Code에 긴 작업을 맡기고 노트북을 덮은 채 나섭니다. 열차가 터널에 들어가고, 폰이 Wi-Fi에서 셀룰러로 넘어가며 1분쯤 신호를 잃고, 다시 보니 SSH 세션이 죽어 있습니다. 당연한 일입니다. SSH는 몇 분마다 네트워크가 바뀌는 클라이언트를 위해 설계된 적이 없고, Mosh와 Eternal Terminal은 바로 그 용도로 존재합니다.

각각이 무엇을 하는지, 폰에서는 무슨 일이 생기는지, 어떻게 고를지 정리했습니다. 주머니 속에서 에이전트를 다루는 전체 그림이 필요하다면 폰에서 Claude Code 사용하기부터 보세요.

폰에서 SSH에 생기는 일

SSH는 TCP 연결 위에서 동작하고, 그 연결은 IP 주소 하나와 소켓 한 쌍에 묶여 있습니다. 폰이 Wi-Fi에서 셀룰러로 옮겨 가면 IP가 바뀌지만 서버는 그것을 알 수 없습니다. 연결은 타임아웃이 끊을 때까지 멈춰 있습니다. iOS나 Android가 배터리를 아끼려고 앱의 네트워크를 재우거나, 메모리가 필요해 앱을 종료할 때도 마찬가지입니다.

잃는 것은 화면만이 아닙니다. 그 SSH 세션에 매달린 프로세스는 SIGHUP을 받고 함께 죽을 수 있습니다. 그래서 SSH 셸에서 바로 시작한 에이전트는 약하고, 이 글의 짝인 코딩 에이전트를 위한 tmux가 사실상 필수입니다.

Mosh: UDP와 조용한 재연결

Mosh(mobile shell)는 시작할 때만 SSH를 씁니다. SSH로 인증하고 컴퓨터에서 mosh-server를 띄운 뒤로는 UDP로 통신합니다. 끊어질 TCP 연결이 없으니 클라이언트가 IP를 바꾸거나, 신호를 잃거나, 잠들어도 네트워크가 돌아오면 세션이 그대로 있습니다.

실제로는 이렇습니다.

  • Wi-Fi에서 셀룰러로 바꿔도 세션이 눈치채지 못합니다.
  • 서버가 응답하지 않으면 세션을 닫지 않고 앱이 알려 줍니다.
  • 예측을 쓰는 로컬 에코: 입력한 글자가 밑줄과 함께 바로 그려지고, 서버가 응답하면 확정됩니다. 지연이 큰 셀룰러 회선에서는 차이가 느껴집니다.

치르는 대가는 다음과 같습니다.

  • 컴퓨터에서 UDP 60000–61000이 열려 있어야 합니다(세션마다 이 범위에서 포트 하나를 씁니다).
  • 스크롤백이 없습니다. Mosh는 화면에 있는 것만 동기화합니다. 위로 스크롤해 에이전트가 출력한 내용을 읽고 싶다면 tmux 안에서 작업하세요.
  • OS가 앱을 종료하면 Mosh 세션도 끝나며 다시 이어 갈 수 없습니다.

Eternal Terminal: TCP지만 이어집니다

Eternal Terminal(ET)은 반대 방향으로 갑니다. 기본 포트 2022의 TCP로 동작하지만 자체 세션 상태를 유지해서, 연결이 끊기면 다시 만들고 놓친 내용을 재전송합니다. 컴퓨터에서 etserver가 실행 중이어야 하고, SSH 세션의 PATH에 etterminal이 있어야 합니다.

폰에서의 장점은 Wendo에서 앱을 닫아도 살아남는 유일한 전송 방식이라는 점입니다. 세션이 홈에 나타나고, 열면 끊긴 지점에서 이어집니다. Wendo는 ET를 실험적이라고 표시하니, 의존하기 전에 그 점을 염두에 두세요.

한눈에 비교

| | SSH | Mosh | ET |
|---|---|---|---|
| 전송 | TCP | UDP | TCP (2022) |
| Wi-Fi ↔ 셀룰러 | 끊김 | 유지 | 유지 |
| 폰 잠자기 | 끊김 | 유지 | 유지 |
| OS가 앱 종료 | 끊김 | 소실 | 재개 |
| 스크롤백 | 있음 | 없음 | 있음 |
| Wendo에서 점프 호스트 사용 | 가능 | 불가 | 불가 |

mosh-server 설치

에이전트가 실행되는 컴퓨터에서 설치합니다.

# macOS
brew install mosh

# Debian / Ubuntu
sudo apt install mosh

# Fedora
sudo dnf install mosh

평소 쓰는 대화형 터미널이 아니라 일반 SSH 연결의 PATH에 있는지 확인하세요.

ssh my-server 'which mosh-server'

Apple Silicon Mac에서 Homebrew는 /opt/homebrew/bin/mosh-server에 설치하는데, 비대화형 세션의 PATH에는 늘 들어 있지 않습니다. 그럴 때는 Wendo에서 연결의 mosh-server 경로를 지정할 수 있습니다.

방화벽 메모

Mosh는 들어오는 UDP 60000–61000이 필요합니다. ufw를 쓰는 Linux에서는 다음과 같습니다.

sudo ufw allow 60000:61000/udp

firewalld에서는 다음과 같습니다.

sudo firewall-cmd --permanent --add-port=60000-61000/udp
sudo firewall-cmd --reload

컴퓨터가 라우터 뒤에 있다면 22번 포트를 포워딩할 때처럼 그 UDP 범위도 포워딩하세요. ET는 같은 방식으로 TCP 2022를 여세요(sudo ufw allow 2022/tcp).

SSH가 프록시나 로드 밸런서를 거치면 Mosh의 UDP가 엉뚱한 IP로 갈 수 있습니다. Wendo에는 이런 경우를 위한 “UDP에 서버 IP 사용” 옵션이 있습니다.

Wendo에서 고르기

연결을 편집할 때 전송 방식 항목에는 자동, SSH, MOSH, ET가 있습니다. 자동이면 Wendo는 Mosh를 먼저, 다음에 ET를 시도하고 둘 다 안 되면 SSH로 돌아갑니다. 자동으로 시작하세요.

실용적인 기준은 이렇습니다.

  • 폰을 들고 돌아다닐 것이고 세션이 몇 분 정도 간다: Mosh.
  • 앱을 닫았다가 한 시간 뒤에 돌아와 홈에서 세션을 찾고 싶다: ET.
  • 점프 호스트를 거쳐 연결한다: SSH. Wendo에서는 Mosh도 ET도 점프 호스트와 함께 쓸 수 없습니다.
  • 컴퓨터가 UDP 포트를 열 수 없다: ET 또는 SSH.

Mosh와 Eternal Terminal은 Wendo Pro 기능이며, Pro가 없으면 연결은 SSH로 이루어집니다. 각 항목은 세션 문서에 설명되어 있습니다.

어떤 전송 방식을 고르든 에이전트는 tmux 안에서 시작하세요. 전송 방식은 화면을 살려 두고, tmux는 프로세스를 살려 두며 Mosh에 없는 스크롤백도 줍니다. 흔한 조합은 회선은 Mosh나 ET, 작업은 tmux이고, 필요한 최소한의 tmux는 여기 있습니다. 에이전트가 권한을 요청할 때 알림을 받으려면 훅을 보세요.