SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-10-30

如何用手機執行 Claude Code

Claude Code 在 VPS 的 tmux 中執行,手機只是終端機畫面。本文說明 SSH keys、應對不穩定行動網路的 mosh、tmux attach,以及實用鍵盤設定。

透過手機使用 Claude Code:實際運作原理

本指南使用手機上的終端機應用程式。Claude Code 運行於 VPS(虛擬專用伺服器)上,並在 tmux 工作階段中持續執行。當您查看時,手機會透過 SSH(安全殼層)連線至該工作階段。關閉應用程式後,代理程式仍會繼續運作,因為該處理程序並非運行於手機上。

Claude Code 亦提供遠端控制功能:在工作階段內執行 /remote-control,即可透過 Claude 行動應用程式或瀏覽器使用,而處理程序則維持在伺服器端。

這種分離架構是設計的核心。手機作業系統會在您切換應用程式後的數秒內將其暫停,因此在手機上啟動的任何長時間作業都會中斷。此外,當您從 Wi-Fi 切換至行動數據時,網路位址也會隨之變更。當處理程序運行於伺服器,而手機僅負責顯示畫面時,上述問題皆可迎刃而解。

您需要在伺服器上準備四項要素:用於維持工作階段的 tmux、用於登入的 SSH 金鑰、用於處理網路變更的 mosh,以及 Claude Code 本身。手機端則僅需一個具備便捷按鍵列的終端機應用程式。

VPS 需求

對於 SSH 與 tmux 的操作,一台小型的 Ubuntu 24.04 伺服器即已足夠。Claude Code 的需求較高,截至 2026 年 10 月的官方要求為:運行 Ubuntu 20.04 或更新版本的 x64 或 ARM64 處理器,並具備 4 GB 以上的 RAM。此外,Claude Code 亦須搭配付費的 Claude 帳號(Pro、Max、Team 或 Enterprise)、具備 API 存取權限的 Console 帳號,或是透過 Amazon Bedrock 等支援的雲端供應商存取,免費版的 Claude.ai 方案並不包含此功能。

請以具備 sudo 權限的一般使用者帳號設定伺服器,切勿直接使用 root。若伺服器為全新狀態,請先完成 新 VPS 的前十分鐘設定,因為待本指南後續進行 SSH 變更時,若已建立使用者與防火牆,操作會更為順暢。

sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --version

安裝程式會將二進位檔案放置於 ~/.local/bin/claude,執行 claude --version 應會顯示類似 2.1.211 (Claude Code) 的輸出。若顯示 command not found,代表該目錄尚未加入您的 PATH:請登出後重新登入,再以 command -v claude 檢查。claude doctor 可在不啟動工作階段的情況下,列印安裝與設定診斷資訊。

在依賴手機操作前,請先從筆記型電腦登入一次。在專案目錄中執行 claude 並依照登入提示操作。此流程要求您在瀏覽器開啟 URL 並將驗證碼貼回終端機,在手機螢幕上切換兩個應用程式會相當緩慢。請使用實體鍵盤完成此步驟,憑證即會保留在伺服器上。

在 tmux 中啟動 Claude Code,避免連線中斷將其終止

tmux new -s claude
cd ~/projects/api
claude

使用 Ctrl-b 脫離工作階段,接著使用 d。tmux 會輸出 [detached (from session claude)],並將控制權交還給 shell。現在可以關閉應用程式、失去訊號,或將手機放入口袋。該窗格仍會繼續執行。

tmux ls
tmux attach -t claude

tmux ls 會為每個工作階段輸出一行,例如 claude: 1 windows (created Thu Jul 30 09:14:02 2026)。tmux attach -t claude 會讓你回到離開時的位置,包括尚未完成的編輯內容。

這是因為 tmux 會自行執行伺服器程序,而你的 shell 和 Claude Code 是該伺服器的子程序,不是 sshd 的子程序。SSH 連線結束時,核心會將 hangup signal(SIGHUP)傳送給附加至該連線的程序;tmux 伺服器不在其中。未使用 tmux 時,同樣會中斷連線的螢幕鎖定,會讓 Claude Code 在工具呼叫進行到一半時停止。在 VPS 內的 tmux 中執行 Claude Code 會更深入說明工作階段配置。

請在伺服器上執行 tmux,不要在手機上執行。在已附加的工作階段內輸入 tmux 會輸出 sessions should be nested with care, unset $TMUX to force;若強制執行,則會有兩組 prefix key 互相衝突。

每次登入時自動附加

在觸控鍵盤上輸入附加指令相當繁瑣。請將以下內容加入伺服器上的 ~/.profile 檔案末端:

if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
  exec tmux new-session -A -s claude
fi

new-session -A -s claude 會在 claude 名稱的 session 存在時進行附加,若不存在則會建立該 session,因此單一指令即可涵蓋兩種情況。exec 會以 tmux 取代登入 shell,如此一來離開 tmux 時會直接關閉連線,而非停留在原始的命令提示字元。若需要一般的 shell,請跳過該檔案:ssh you@server -t "bash --noprofile"。

請將此內容放入 ~/.profile,而非 ~/.bashrc。Bash 在執行非互動式 SSH 指令時也會讀取 ~/.bashrc,但上述的 [ -t 1 ] 防護機制可避免在檔案傳輸期間啟動 tmux。未經防護的啟動指令若產生輸出,會導致傳輸協定發生錯誤,例如 Received message too long。~/.profile 僅針對登入 shell 執行,這正是互動式 SSH 連線的運作方式。

~/.profile 也是 Ubuntu 將 ~/.local/bin 加入 PATH 的位置。若 claude 在登入後運作正常,但 tmux 內的 shell 卻顯示 command not found,原因即在於執行順序。因此,請如上所述從登入 shell 啟動 tmux,而非透過跳過 profile 的腳本來執行。

這兩個應用程式都支援 SSH 和 mosh,也都會在應用程式中儲存金鑰。兩者的差異在於介面。

Blink Shell 以命令操作為主。在提示字元中輸入 ssh you@server 或 mosh you@server,語法與桌面終端機相同。輸入 config 可開啟設定,並在 Keys 區段建立金鑰組。

Termius 以表單操作為主。先填寫主機項目,再在主機詳細資料中將該主機的連線方式從 SSH 切換為 Mosh。Termius 內建 mosh 實作,並支援 mosh 1.3.0 及更新版本,因此伺服器仍需安裝 mosh 套件。

無論使用哪個應用程式,都應在應用程式內產生金鑰,絕不要將既有的私密金鑰複製到手機。應用程式會顯示公開金鑰部分;這是一行文字,請將它加入伺服器上的 ~/.ssh/authorized_keys。每台裝置的 SSH 金鑰與撤銷方式說明命名及撤銷步驟。對手機而言,這比對筆電更重要。

請啟用終端機應用程式本身的生物辨識或密碼鎖定功能。否則,只要螢幕保持喚醒,未鎖定的手機就等同於在伺服器上開啟的 shell。

Android:Termux

pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pub

Termux 會在自己的儲存庫中提供 OpenSSH 和 mosh 套件,因此 ssh、ssh-keygen 和 mosh 的行為與桌面環境相同。將顯示的公開金鑰行加入伺服器上的 ~/.ssh/authorized_keys,然後使用 mosh you@server 連線。

Android 螢幕鍵盤沒有 Esc 鍵和 Ctrl 鍵,而 Claude Code 需要這兩個按鍵。Termux 可以自行繪製按鍵列。在 ~/.termux/termux.properties 中加入一行:

extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]

接著執行 termux-reload-settings,按鍵列就會顯示在鍵盤上方。同樣的重新載入動作也會套用放置於 ~/.termux/font.ttf 的等寬 TrueType 字型。

Android 可能會在 Termux 位於背景時停止它;在此情境下,代價只有重新連線。工作階段和代理程式都在伺服器上。

為什麼離開 Wi-Fi 時終端機會凍結,以及 mosh 解決了什麼問題?

SSH 連線是 TCP (transmission control protocol) 連線,而 TCP 連線是由兩端的位址與埠號所識別。當您走出 Wi-Fi 範圍,手機會從行動網路取得新位址,導致舊連線在兩端都無法匹配。系統不會發出任何通知,終端機只會停止回應,直到 TCP 放棄連線,隨後 ssh 會印出 client_loop: send disconnect: Broken pipe。若要立即強制結束凍結的連線,請按下 Enter,接著按下 ~,最後按下 .。

mosh (mobile shell) 移除了這種故障模式。它使用 SSH 登入並啟動 mosh-server 程序,讀取伺服器選定的 UDP (user datagram protocol) 埠號後,隨即關閉 SSH 連線。此後雙方透過共用的連線金鑰驗證 UDP 資料包來交換資訊,因此連線是由該金鑰識別,而非您的位址。更換新位址後連線仍可繼續。mosh 也會在本地端顯示您的輸入,並在伺服器狀態不一致時重新繪製畫面,這就是它在緩慢的行動網路下仍能保持順暢的原因。

mosh 使用 60000 到 61000 之間的 UDP 埠,請開啟該範圍:

sudo ufw allow 60000:61000/udp
sudo ufw status

使用 ufw 開啟埠號 說明了防火牆的其餘設定。若您的供應商在控制面板提供獨立的網路防火牆,請務必在該處也加入相同的範圍,因為 ufw 規則無法影響位於機器前端的過濾器。

mosh 常見的故障有兩種。登入成功後隨即凍結並顯示 Nothing received from server on UDP port 60001.,代表 mosh-server 已啟動,但用戶端無法透過該 UDP 埠連線。這通常表示手機與伺服器之間的某處防火牆阻擋了 mosh 範圍內的 UDP 流量。若連線回報 mosh-server 找不到,代表伺服器上缺少該套件,或該套件不在登入的 PATH 路徑中。請安裝它,或使用 mosh --server=/usr/bin/mosh-server you@server 直接指定路徑。

若伺服器的登入語系 (locale) 不是 UTF-8,mosh-server 會嘗試使用用戶端提供的語系設定並再次檢查。只有在該設定也無法提供 UTF-8 時,它才會拒絕執行並回報 mosh-server needs a UTF-8 native locale to run.。請先修正伺服器上的語系設定。

locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

兩端都需要 UTF-8 語系,且 mosh-server 也會套用用戶端傳送的語系設定。若修正伺服器後錯誤依然存在,請在手機的終端機應用程式中將 LANG 設定為 UTF-8 的值,mosh 的 FAQ 也提到 mosh-client 可能需要這樣做。

mosh 有兩件事無法做到。其 README 指出 mosh 不支援 X forwarding 或非互動式的 SSH 用途,包含埠號轉發 (port forwarding),因此若要預覽 Claude Code 剛啟動的網頁應用程式,仍需使用一般的 ssh -L 8080:127.0.0.1:8080 you@server。此外,它僅同步可見的螢幕畫面,因此本身沒有捲動紀錄 (scrollback)。第二個限制在此處並無影響,因為 tmux 會保留捲動紀錄:按下 Ctrl-b 再按 [ 即可進入複製模式,透過拖曳或方向鍵即可捲動,按下 q 則可離開。

讓手機螢幕變得好用

伺服器上 ~/.tmux.conf 中的四行設定完成了大部分的工作:

set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000

mouse on 將觸控拖曳轉為捲動,並將點擊轉為窗格或視窗選擇,這取代了大部分難以輸入的前綴鍵。status-position top 將 tmux 狀態列從底部邊緣移開,避免被螢幕鍵盤及其建議列遮擋。default-terminal 將 tmux 向 Claude Code 宣告的終端機名稱固定。若沒有這一行,tmux 會宣告其建置時所選的名稱。tmux 3.4 的設定腳本會從 screen 開始,接著依序測試 screen-256color、tmux 與 tmux-256color,若測試失敗則保留先前的選擇。若建置時找不到 tmux-256color 的 terminfo 項目,最終會使用 tmux、screen-256color 或單純的 screen,這會導致顏色與方框繪製效果不如預期。

學會四個按鍵,其餘操作便會相當順手。

  • Esc 可中斷 Claude 的回應並保留已完成的工作,因此這是您最希望放在拇指附近的操作鍵。
  • Ctrl+C 同樣能中斷正在執行的操作。在閒置提示字元下,按第一次會清除輸入,按第二次則會退出 Claude Code,因此它是較為強硬的工具。
  • Esc 按兩次可清除草稿提示,在空白提示字元下則會開啟重繞選單。
  • 若要輸入多行提示,請輸入 \ 然後按 Enter。此格式適用於所有終端機。Shift+Enter 僅在少數桌面終端機中原生支援,而行動裝置客戶端並不包含在內。

避免使用分割窗格。直向手機寬度約為 40 個字元,垂直分割會導致每個窗格僅剩 20 個字元,所有差異比對(diff)都會換行而變得難以閱讀。請改用 tmux 視窗:Ctrl-b c 可建立視窗,Ctrl-b n 可切換至下一個。若第二個視窗開啟了另一個 Claude Code 工作階段,這兩個工作階段可以直接傳遞工作,無須在觸控螢幕上於視窗間複製文字。當需要正確閱讀差異比對時,請將手機橫放。

螢幕上顯示多少文字值得刻意設定,因為 輸出風格會編輯每次回覆背後的系統提示,更簡潔的風格意味著在手機上捲動時需要瀏覽的螢幕頁數較少。

在小螢幕上進行長時間工作主要會遇到上下文(context)問題,因此在嘗試從火車上進行全天工作前,建議先閱讀 管理 Claude Code 上下文視窗。

加強安全性:僅限金鑰,停用密碼

您的手機現在持有存取機器的金鑰,該機器用於編輯程式碼與執行指令。請關閉密碼驗證。使用 drop-in 檔案比直接編輯 sshd_config 更安全,因為 Ubuntu 的 sshd_config 在開頭包含了 /etc/ssh/sshd_config.d/*.conf,且設定值以首次出現者為準。

sudo tee /etc/ssh/sshd_config.d/00-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload ssh

Drop-in 檔案會依檔名順序讀取。請檢查 sudo sshd -T 是否有 passwordauthentication no、kbdinteractiveauthentication no、pubkeyauthentication yes 與 permitrootlogin no;若較早的檔案已設定這些項目,該設定會優先生效,必須在該處進行修正。

sshd -t 會解析設定檔,若語法正確則不會輸出任何內容。若跳過此步驟且出現拼字錯誤,sshd 在重新載入時將會失敗。請保持目前的連線工作階段開啟,並在關閉任何視窗前從第二個連線進行測試,因為錯誤的金鑰會導致 Permission denied (publickey).,且在關閉密碼驗證後將無備援方案。此時的復原路徑僅剩服務供應商提供的控制台。若測試連線失敗,請使用 ssh -v 重新連線並進行排解,同時保持第一個工作階段開啟,因為 該錯誤訊息涵蓋五種不同的故障原因,詳細輸出會告知您具體是哪一種。

請為每台裝置配置專屬金鑰。若手機遺失,只需從 ~/.ssh/authorized_keys 刪除一行,您的筆記型電腦仍可正常運作。若共用金鑰,則必須更換所有裝置上的金鑰。

若您在 Ubuntu 24.04 將 SSH 移至其他埠,請注意監聽器屬於 ssh.socket。systemd 產生器會根據 SSH 設定中的 Port 行建立該 socket,因此您不需要 ListenStream 覆寫設定,但僅重新啟動 ssh 會導致伺服器仍監聽 22 埠。請將 Port 行放入 drop-in 檔案,在 ufw 中允許新埠,然後執行 sudo systemctl daemon-reload 並接著執行 sudo systemctl restart ssh.socket。強化 VPS 上的 SSH 涵蓋了此設定及其他攻擊面防護。

fail2ban for SSH 在停用密碼後對安全性的提升有限,因為猜測的密碼根本無法通過驗證。它能提供的優勢是保持日誌簡潔,讓真正的登入嘗試更容易被識別。

更強大的選項是讓 SSH 不暴露於公用網際網路。將伺服器置於 您自行架設的 WireGuard VPN 後方,按需在手機上建立通道,並將 sshd 的 ListenAddress 僅綁定於該通道。mosh 可透過通道運作,因為兩端皆使用 UDP。需注意:通道會增加封包負擔,若大型傳輸停滯,請調低手機 WireGuard 設定中的 MTU (maximum transmission unit)。

關於此操作方式的最後一點提醒:您在手機上核准權限提示時,螢幕一次僅能顯示幾行差異內容。這正是保留防護機制而非將其關閉的原因。同時請檢查工作階段啟動時的權限模式,因為 自動模式現在是 Claude Code v2.1.283 互動式終端工作階段的內建啟動模式,它會直接在工作目錄中進行檔案編輯而不會暫停詢問。在 VPS 上安全執行 Claude Code 涵蓋了在將觸控螢幕作為主要存取方式前,應設定的使用者與目錄限制。

當重新連線發生異常時

tmux attach 顯示 no server running on /tmp/tmux-1000/default 代表 tmux 在該 socket 上找不到伺服器。通常是因為伺服器已終止,這幾乎總是意味著機器曾重新開機。請使用 uptime 進行檢查。若機器未重新開機且 pgrep tmux 仍顯示有伺服器,這並不代表 socket 檔案已被刪除,因為 -L 與 -S 旗標允許伺服器監聽不同的 socket。若您啟動 tmux 時使用了其中之一,請在執行 tmux attach 時傳入相同的旗標。若 socket 確實被誤刪,pkill -USR1 tmux 會要求伺服器重新建立它,但 tmux 手冊指出,若任何父目錄遺失,此操作將會失敗。來自 自動安全性更新 的核心更新需要重新開機才會生效,但 unattended-upgrades 僅在啟用 Unattended-Upgrade::Automatic-Reboot 時才會自動重啟;其預設值為 false。重新開機後的機器不會有 tmux session,因此請將任何 Claude Code 的執行視為可重新啟動的程序。

can't find session: claude 的情況則不同。tmux 伺服器正在執行,但該名稱不存在。tmux ls 會顯示目前存在的項目。

若您連線後發現原本 Claude Code 的位置只剩下普通的 shell 提示字元,代表該程序已結束但 session 未關閉。請查看 dmesg -T | tail 中是否有類似 Out of memory: Killed process 4821 (claude) 的行,這確認了程序因記憶體不足(OOM)而被終止。請檢查提示字元上方的 shell 捲動紀錄,查看是否有其他結束訊息。

若視窗恢復時大小錯誤、邊緣被截斷或周圍有未使用的空間,代表有兩個客戶端以不同大小連線。預設情況下,tmux 3.4 會將視窗大小調整為最近一次活動的客戶端大小(window-size latest),因此您寬度為 200 欄的筆電與寬度為 40 的手機會輪流調整視窗大小。請在連線時強制中斷其他連線:tmux attach -d -t claude。

FAQ

我可以直接在手機上執行 Claude Code,而不是透過 VPS 嗎?

終端機 CLI 不支援 Android 或 iOS。截至 2026 年 10 月,支援的平台為 macOS、Windows、Ubuntu 20.04 或更新版本、Debian 10 或更新版本,以及 Alpine 3.19 或更新版本,且需具備 4 GB 以上的 RAM。Android 與 iOS 並不在支援清單中。此外,手機會讓應用程式進入休眠並頻繁變更網路位址,這是長時間執行的代理程式無法容忍的。請在伺服器上執行,並將手機僅作為顯示介面使用。

如果我關閉應用程式或失去訊號,工作階段會中斷嗎?

會,這由兩個獨立的工具共同維護。tmux 會讓處理程序在伺服器上持續執行,因此連線中斷時不會導致程式終止。mosh 則能讓連線在位址變更時保持活躍,因此從 Wi-Fi 切換到行動數據時,甚至不需要重新連線。若僅使用標準 SSH 而未搭配 tmux,連線中斷會發送 SIGHUP 訊號,導致 Claude Code 在任務執行中途停止。

為什麼 mosh 連線後卻沒有顯示任何內容?

若登入成功但隨後卡在 Nothing received from server on UDP port 60001.,代表用戶端無法透過該 UDP 埠存取 mosh-server,這通常表示防火牆阻擋了 UDP 60000 到 61000 的連接埠。請在 ufw 中加入此範圍,並在供應商的網路防火牆中再次設定(大多數控制面板中這是獨立的控制項目)。如果 mosh 回報找不到 mosh-server,則表示伺服器缺少該套件或其登入 PATH 未包含該路徑:請使用 sudo apt install mosh 安裝,或改用 mosh --server=/usr/bin/mosh-server you@server。

如何在沒有 Esc 鍵的鍵盤上中斷 Claude Code?

請新增一個按鍵列。Termux 可透過 ~/.termux/termux.properties 中的 extra-keys 進行設定,而 Termius 與 Blink 皆內建可於設定中編輯的按鍵列。Esc 可中斷執行中的回應並保留已完成的工作。Ctrl+C 同樣能中斷執行,但在閒置提示字元下連續按兩次會退出 Claude Code,因此請優先使用 Esc。

將 SSH 開放給網際網路使用足夠安全嗎?

在關閉密碼驗證的情況下,唯一能成功的憑證是從未離開過您裝置的金鑰,對於一台可以重建的機器而言,這是合理的風險。請為每台裝置設定專屬金鑰,這樣即使手機遺失,也只需在 authorized_keys 中刪除一行設定即可。如果您不想在公開連接埠上回應任何請求,請將伺服器置於 WireGuard 後方,並讓 sshd 僅監聽隧道位址。

這篇文章對您有幫助嗎?