SSD Nodes Learn RAM 8GB — $66/tahun
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-01

Cara Guna Claude Code dari Telefon melalui VPS

Claude Code berjalan dalam tmux pada VPS, manakala telefon hanya membuka sesi SSH. Ikuti tetapan kunci SSH, mosh, tmux attach dan pembaikan papan kekunci.

Claude Code dari telefon: cara ia berfungsi sebenarnya

Claude Code dari telefon bukan aplikasi mudah alih. Claude Code berjalan pada VPS (pelayan persendirian maya), dalam sesi tmux yang kekal terbuka, dan telefon anda membuka sambungan SSH (shell selamat) ke sesi itu selagi anda melihatnya. Tutup aplikasi tersebut dan ejen terus bekerja kerana proses itu tidak pernah berjalan pada telefon.

Pemisahan ini ialah keseluruhan reka bentuknya. Sistem pengendalian telefon menggantung aplikasi beberapa saat selepas anda beralih daripadanya, jadi apa-apa tugas yang berjalan lama dan dimulakan pada telefon akan terhenti. Telefon juga menerima alamat rangkaian baharu setiap kali anda beralih daripada wifi kepada data mudah alih. Kedua-dua masalah ini hilang apabila proses berjalan pada pelayan dan telefon hanya memaparkan skrin.

Anda memerlukan empat perkara pada pelayan: tmux untuk mengekalkan sesi, kunci SSH untuk log masuk, mosh untuk perubahan rangkaian, dan Claude Code itu sendiri. Pada telefon, anda hanya memerlukan satu aplikasi terminal dengan bar kekunci yang boleh dicapai.

Keperluan pada VPS

Pelayan Ubuntu 24.04 yang kecil sudah mencukupi untuk bahagian SSH dan tmux. Claude Code memerlukan lebih banyak sumber. Keperluan rasmi setakat Julai 2026 ialah Ubuntu 20.04 atau lebih baharu pada pemproses x64 atau ARM64, dengan RAM sekurang-kurangnya 4 GB. Pelan 1 GB boleh memasangnya, tetapi proses itu kemudiannya dihentikan oleh kernel apabila beban meningkat. Claude Code juga memerlukan akaun Claude berbayar (Pro, Max, Team atau Enterprise) atau akaun Console dengan akses API, kerana pelan Claude.ai percuma tidak menyertakannya.

Sediakan pelayan dengan pengguna biasa yang mempunyai sudo, bukan sebagai root. Jika pelayan itu baharu, ikuti sepuluh minit pertama pada VPS baharu terlebih dahulu, kerana perubahan SSH kemudian dalam panduan ini lebih mudah selepas pengguna dan firewall tersedia.

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

Pemasang meletakkan binari di ~/.local/bin/claude, dan claude --version mencetak baris seperti 2.1.211 (Claude Code). Jika ia mencetak command not found, direktori itu belum berada dalam PATH anda: log keluar, log masuk semula, kemudian semak dengan command -v claude. claude doctor mencetak diagnostik pemasangan dan tetapan tanpa memulakan sesi.

Log masuk sekali sekarang dari komputer riba, sebelum anda bergantung pada telefon. Jalankan claude dalam direktori projek dan ikuti arahan log masuk. Proses ini meminta anda membuka URL dalam pelayar dan membawa kod kembali ke terminal. Mengendalikan dua aplikasi pada skrin telefon untuk tujuan itu adalah lambat. Lakukan sekali menggunakan papan kekunci sebenar supaya kelayakan kekal pada pelayan.

Mulakan Claude Code dalam tmux supaya sambungan yang terputus tidak menghentikannya

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

Lepaskan sesi dengan Ctrl-b, kemudian d. tmux memaparkan [detached (from session claude)] dan mengembalikan anda ke shell. Kini tutup aplikasi, kehilangan isyarat, atau simpan telefon anda. Pane itu terus berjalan.

tmux ls
tmux attach -t claude

tmux ls memaparkan satu baris bagi setiap sesi, seperti claude: 1 windows (created Thu Jul 30 09:14:02 2026). tmux attach -t claude mengembalikan anda tepat ke tempat anda berhenti, termasuk suntingan yang belum selesai.

Cara ini berfungsi kerana tmux menjalankan proses pelayannya sendiri. Shell dan Claude Code ialah proses anak pelayan itu, bukan proses anak sshd. Apabila sambungan SSH berakhir, kernel menghantar isyarat hangup, SIGHUP, kepada proses yang dilampirkan pada sambungan itu. Pelayan tmux tidak termasuk dalam proses tersebut. Tanpa tmux, kunci skrin yang sama yang memutuskan sambungan anda akan menghentikan Claude Code di tengah-tengah panggilan alat. Menjalankan Claude Code pada VPS dalam tmux menerangkan susun atur sesi dengan lebih lanjut.

Jalankan tmux pada pelayan, bukan pada telefon. Menaip tmux dalam sesi yang sudah anda lampirkan memaparkan sessions should be nested with care, unset $TMUX to force. Jika anda memaksanya, anda akan mempunyai dua kekunci awalan yang perlu dikendalikan.

Lampirkan secara automatik pada setiap log masuk

Menaip perintah attach menggunakan papan kekunci sentuh akan menyusahkan. Tambahkan ini pada penghujung ~/.profile pada pelayan:

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 melampirkan sambungan kepada sesi bernama claude jika sesi itu wujud dan menciptanya jika sesi itu tidak wujud. Oleh itu, satu perintah merangkumi kedua-dua keadaan. exec menggantikan shell log masuk dengan tmux. Apabila anda keluar daripada tmux, sambungan ditutup dan bukannya memaparkan gesaan kosong. Jika anda memerlukan shell biasa, langkau fail itu: ssh you@server -t "bash --noprofile".

Letakkannya dalam ~/.profile, bukan dalam ~/.bashrc. ~/.bashrc turut dijalankan untuk sesi bukan interaktif, menyebabkan pemindahan fail gagal: scp dan sftp membaca output yang tidak dijangka sebagai data protokol lalu gagal dengan Received message too long. ~/.profile hanya dijalankan untuk shell log masuk, iaitu jenis shell yang digunakan oleh sesi SSH interaktif.

~/.profile juga merupakan tempat Ubuntu menambahkan ~/.local/bin pada PATH. Jika claude berfungsi sejurus selepas log masuk tetapi shell di dalam tmux memaparkan command not found, susunan tersebut ialah puncanya. Oleh itu, mulakan tmux daripada shell log masuk seperti di atas, bukan daripada skrip yang melangkau profile.

Kedua-dua aplikasi menyokong SSH dan mosh serta menyimpan kunci dalam aplikasi. Perbezaannya ialah antara muka.

Blink Shell dikawal melalui arahan. Pada gesaannya, anda menaip ssh you@server atau mosh you@server, menggunakan sintaks yang sama seperti terminal desktop. Tetapan dibuka dengan menaip config, dan bahagian Keys mencipta pasangan kunci untuk anda.

Termius menggunakan borang. Anda mengisi entri hos, kemudian menukar hos itu daripada SSH kepada Mosh dalam butiran hos. Termius menyertakan pelaksanaan mosh sendiri dan menyokong mosh 1.3.0 serta yang lebih baharu. Oleh itu, pakej mosh masih perlu dipasang pada pelayan.

Jana kunci itu dalam aplikasi bagi kedua-dua keadaan, dan jangan sekali-kali menyalin kunci peribadi sedia ada ke telefon. Aplikasi memaparkan bahagian awam kunci itu. Baris tunggal tersebut perlu ditambahkan pada ~/.ssh/authorized_keys di pelayan. Kunci SSH setiap peranti dan cara membatalkan salah satunya menerangkan penamaan dan langkah pembatalan, yang lebih penting untuk telefon berbanding komputer riba.

Aktifkan kunci biometrik atau kunci kod laluan aplikasi terminal itu sendiri. Tanpa perlindungan ini, telefon yang tidak dikunci menyediakan shell terbuka pada pelayan anda selagi skrin kekal menyala.

Android: Termux

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

Termux menyediakan pakej OpenSSH dan mosh dalam repositorinya sendiri. Oleh itu, ssh, ssh-keygen dan mosh berfungsi seperti pada komputer desktop. Tambahkan baris kunci awam yang dipaparkan ke ~/.ssh/authorized_keys pada pelayan. Kemudian sambung dengan mosh you@server.

Papan kekunci pada skrin Android tidak mempunyai kekunci Esc dan Ctrl. Claude Code memerlukan kedua-duanya. Termux boleh memaparkan baris kekuncinya sendiri. Letakkan satu baris dalam ~/.termux/termux.properties:

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

Kemudian jalankan termux-reload-settings. Baris itu akan muncul di atas papan kekunci. Muat semula dengan cara yang sama untuk menggunakan fon TrueType monospace yang diletakkan di ~/.termux/font.ttf.

Android mungkin menghentikan Termux apabila aplikasi itu berada di latar belakang. Dalam keadaan ini, anda hanya perlu menyambung semula. Sesi dan ejen berada pada pelayan.

Mengapa terminal terhenti apabila saya keluar dari rangkaian wifi, dan apakah yang dibaiki oleh mosh?

Sambungan SSH ialah sambungan TCP (protokol kawalan penghantaran), dan sambungan TCP dikenal pasti melalui kedua-dua alamat serta kedua-dua port. Apabila anda keluar dari julat wifi, telefon memperoleh alamat baharu daripada rangkaian mudah alih. Oleh itu, sambungan lama tidak lagi sepadan pada mana-mana hujung. Tiada pemberitahuan tentang perkara ini. Terminal hanya berhenti memberikan respons sehingga TCP berhenti mencuba, kemudian ssh mencetak client_loop: send disconnect: Broken pipe. Untuk menamatkan sesi yang terhenti dengan segera, tekan Enter, kemudian ~, kemudian ..

mosh (shell mudah alih) menghapuskan kegagalan ini. Ia menggunakan SSH sekali untuk log masuk dan memulakan proses mosh-server, membaca port UDP (protokol datagram pengguna) yang dipilih oleh pelayan, kemudian menutup sambungan SSH. Selepas itu, kedua-dua pihak bertukar datagram UDP yang disahkan menggunakan kunci sesi dikongsi. Oleh itu, sesi dikenal pasti melalui kunci tersebut, bukan melalui alamat anda. Alamat baharu hanya meneruskan sesi. mosh juga memaparkan taipan anda secara setempat dan melukis semula paparan apabila pelayan memberikan hasil yang berbeza. Sebab itu mosh kekal boleh digunakan pada sambungan mudah alih yang perlahan.

mosh menggunakan port UDP antara 60000 hingga 61000. Oleh itu, buka julat tersebut:

sudo ufw allow 60000:61000/udp
sudo ufw status

Membuka port dengan ufw menerangkan bahagian konfigurasi firewall yang selebihnya. Jika penyedia anda menawarkan firewall rangkaian berasingan dalam panel kawalannya, tambahkan julat yang sama di situ. Peraturan ufw tidak dapat mempengaruhi penapis yang berada di hadapan mesin.

Dua kegagalan mosh sering berlaku. Log masuk yang berjaya tetapi kemudian tergantung dan memaparkan Nothing received from server on UDP port 60001. bermaksud julat UDP tersebut disekat di suatu tempat antara telefon dengan pelayan. Sambungan yang melaporkan mosh-server not found bermaksud pakej itu tiada pada pelayan atau tiada dalam PATH log masuk. Pasangnya, atau tentukan lokasinya secara terus dengan mosh --server=/usr/bin/mosh-server you@server.

mosh juga enggan berjalan apabila tempat log masuk bukan UTF-8, dan akan memaparkan mesej berikut: mosh-server needs a UTF-8 native locale to run. Betulkan tempat pada pelayan, bukan pada telefon.

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

mosh tidak melakukan dua perkara. README-nya menyatakan bahawa mosh tidak menyokong pemajuan X atau penggunaan SSH bukan interaktif, termasuk pemajuan port. Oleh itu, untuk mempratonton aplikasi web yang baru dimulakan oleh Claude Code, anda masih memerlukan ssh -L 8080:127.0.0.1:8080 you@server biasa. mosh juga hanya menyegerakkan skrin yang kelihatan, jadi ia tidak mempunyai sejarah tatal sendiri. Had kedua itu tidak menimbulkan masalah di sini kerana tmux menyimpan sejarah tatal: Ctrl-b kemudian [ memasuki mod salin, seretan atau kekunci anak panah digunakan untuk menatal, dan q keluar.

Menjadikan skrin telefon boleh digunakan

Empat baris dalam ~/.tmux.conf pada pelayan melakukan sebahagian besar kerja:

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

mouse on menukar gerakan seret sentuh kepada tatalan dan ketikan kepada pemilihan anak tetingkap atau tetingkap. Ini menggantikan kebanyakan kekunci awalan yang sukar ditaip. status-position top mengalihkan bar status tmux dari tepi bawah, tempat papan kekunci pada skrin dan bar cadangannya menutupnya. default-terminal penting kerana jika tidak, tmux mengumumkan terminal screen kepada Claude Code, lalu warna dan lukisan kotak dipaparkan dengan lebih buruk daripada yang sepatutnya. Jika tmux kemudian enggan bermula dengan missing or unsuitable terminal: tmux-256color, entri terminfo tiada: sudo apt install ncurses-term.

Pelajari empat kekunci, dan selebihnya akan menjadi selesa.

  • Esc menghentikan Claude ketika sedang memberikan respons dan mengekalkan kerja yang telah siap. Oleh itu, kekunci ini patut berada paling hampir dengan ibu jari anda.
  • Ctrl+C juga menghentikan operasi yang sedang berjalan. Pada gesaan melahu, tekanan pertama mengosongkan input dan tekanan kedua keluar daripada Claude Code. Oleh itu, kekunci ini lebih kasar tindakannya.
  • Esc dua kali mengosongkan gesaan draf. Pada gesaan kosong, kekunci ini membuka menu putar balik.
  • Untuk gesaan berbilang baris, taip \ kemudian tekan Enter. Bentuk ini berfungsi dalam setiap terminal. Shift+Enter hanya tersedia secara natif dalam senarai pendek terminal desktop, dan klien mudah alih tidak termasuk dalam senarai itu.

Elakkan anak tetingkap berpecah. Telefon dalam orientasi potret lebarnya kira-kira 40 lajur, jadi pembahagian menegak meninggalkan 20 lajur bagi setiap anak tetingkap dan setiap diff akan terbalut sehingga sukar dibaca. Sebaliknya, gunakan tetingkap tmux: Ctrl-b c mencipta satu tetingkap dan Ctrl-b n beralih ke tetingkap seterusnya. Pusingkan telefon ke orientasi landskap apabila anda perlu membaca diff dengan betul.

Sesi panjang pada skrin kecil kebanyakannya merupakan masalah konteks. Oleh itu, mengurus tetingkap konteks Claude Code wajar dibaca sebelum anda cuba menjalankan kerja sehari penuh dari dalam kereta api.

Kukuhkan keselamatan: kunci sahaja, tanpa kata laluan

Telefon kini menyimpan kunci untuk mesin yang mengedit kod anda dan menjalankan arahan. Matikan pengesahan kata laluan. Fail drop-in lebih selamat daripada mengedit sshd_config secara terus, kerana sshd_config Ubuntu menyertakan /etc/ssh/sshd_config.d/*.conf pada bahagian atas dan nilai pertama yang ditemui bagi sesuatu tetapan akan digunakan.

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

sshd -t menghuraikan konfigurasi dan tidak mencetak apa-apa apabila konfigurasi itu sah. Jika langkah ini dilangkau, satu kesilapan taip menyebabkan sshd gagal semasa dimuatkan semula. Kekalkan sesi kerja anda terbuka dan uji daripada sambungan kedua sebelum menutup apa-apa, kerana kunci yang salah kini menyebabkan Permission denied (publickey). dan, apabila kata laluan dimatikan, tiada kaedah sandaran. Pada ketika itu, laluan pemulihan ialah konsol penyedia anda.

Berikan setiap peranti kunci sendiri. Jika telefon hilang, anda hanya perlu memadam satu baris daripada ~/.ssh/authorized_keys, dan komputer riba anda terus berfungsi. Satu kunci yang dikongsi bermakna anda perlu menukar kunci pada setiap peranti yang anda miliki.

Jika anda memindahkan SSH ke port lain pada Ubuntu 24.04, ambil perhatian bahawa pendengar itu dimiliki oleh ssh.socket, jadi baris Port sahaja tidak mengubah apa-apa. Jalankan sudo systemctl edit ssh.socket, kosongkan nilai lalai dengan ListenStream= kosong, kemudian tetapkan port anda pada baris seterusnya. Pengerasan SSH pada VPS menerangkan perkara itu dan aspek permukaan serangan yang lain.

fail2ban untuk SSH menambah sedikit keselamatan selepas kata laluan dimatikan, kerana kata laluan yang diteka langsung tidak boleh diterima. Namun, ia menghasilkan log yang lebih senyap, sekali gus memudahkan percubaan log masuk sebenar dikesan.

Pilihan yang lebih kukuh ialah memastikan SSH tidak terdedah kepada internet awam. Letakkan pelayan di belakang VPN WireGuard yang anda hos sendiri, aktifkan terowong pada telefon apabila diperlukan, dan berikan sshd ListenAddress pada terowong sahaja. mosh berfungsi melalui terowong kerana kedua-dua pihak menggunakan UDP. Satu perkara perlu diberi perhatian: terowong menambah overhed paket. Oleh itu, jika pemindahan besar terhenti, rendahkan MTU (unit penghantaran maksimum) dalam konfigurasi WireGuard telefon.

Satu perkara terakhir tentang cara kerja ini. Daripada telefon, anda meluluskan gesaan keizinan pada skrin yang hanya memaparkan beberapa baris diff pada satu-satu masa. Ini ialah sebab untuk mengekalkan kawalan keselamatan, bukannya mematikannya. Menjalankan Claude Code dengan selamat pada VPS menerangkan had pengguna dan direktori yang wajar ditetapkan sebelum kaedah utama anda untuk masuk ialah skrin sentuh.

Apabila anda menyambung semula dan terdapat masalah

tmux attach yang mencetak no server running on /tmp/tmux-1000/default bermakna pelayan tmux telah tiada. Ini hampir selalu bermakna mesin telah but semula. Semak dengan uptime. Kemas kini kernel daripada kemas kini keselamatan automatik akan but semula mesin. Mesin yang telah but semula tidak mempunyai sesi tmux. Oleh itu, anggap setiap pelaksanaan Claude Code sebagai proses yang boleh anda mulakan semula.

can't find session: claude berbeza. Pelayan tmux sedang berjalan, tetapi nama tersebut tiada. tmux ls memaparkan perkara yang masih wujud.

Jika anda menyambung dan mendapati gesaan shell biasa di tempat Claude Code sebelum ini berjalan, proses tersebut telah tamat tanpa menamatkan sesi. Semak dmesg -T | tail untuk baris seperti Out of memory: Killed process 4821 (claude). Baris ini muncul apabila mesin tidak memenuhi keperluan 4 GB semasa operasi penyuntingan besar. Jika baris tersebut tiada, Claude Code telah keluar sendiri. Teks skrol shell di atas gesaan mengandungi sebabnya.

Tetingkap yang muncul semula dalam saiz kecil, dengan ruang kosong di sekelilingnya, bermakna dua klien disambungkan pada saiz yang berbeza. tmux menetapkan saiz tetingkap mengikut klien yang disambungkan dan mempunyai saiz paling kecil. Komputer riba anda masih mengekalkan sesi pada lebar 200 lajur, manakala telefon meminta 40 lajur. Putuskan sambungan klien lain semasa anda menyambung: tmux attach -d -t claude.

FAQ

Bolehkah saya menjalankan Claude Code pada telefon itu sendiri dan bukannya pada VPS?

Tidak. Platform yang disokong setakat Julai 2026 ialah macOS, Windows, Ubuntu 20.04 atau lebih baharu, Debian 10 atau lebih baharu, dan Alpine 3.19 atau lebih baharu, dengan RAM 4 GB atau lebih. Android dan iOS tidak tersenarai. Telefon juga akan menidurkan aplikasinya dan kerap menukar alamat rangkaian, yang tidak dapat ditangani oleh ejen yang berjalan untuk tempoh lama. Jalankan aplikasi itu pada pelayan dan gunakan telefon sebagai paparan.

Adakah sesi kekal jika saya menutup aplikasi atau kehilangan isyarat?

Ya, dan dua komponen berasingan mengendalikannya. tmux memastikan proses terus berjalan pada pelayan, jadi proses tidak terhenti apabila sambungan berakhir. mosh memastikan sambungan itu sendiri terus aktif apabila alamat berubah, jadi pertukaran daripada wifi kepada data mudah alih tidak memerlukan sambungan semula. Dengan SSH biasa tanpa tmux, sambungan yang terputus menghantar SIGHUP dan Claude Code berhenti di tengah-tengah tugas.

Mengapakah mosh bersambung tetapi kemudian tidak memaparkan apa-apa?

Log masuk yang berjaya kemudian tergantung dengan Nothing received from server on UDP port 60001. bermaksud UDP 60000 hingga 61000 tidak dibuka. Tambahkan julat itu dalam ufw, kemudian tambahkan sekali lagi dalam firewall rangkaian penyedia anda, yang merupakan kawalan berasingan pada kebanyakan panel. Jika mosh melaporkan bahawa mosh-server tidak ditemui, pakej itu tiada pada pelayan: sudo apt install mosh.

Bagaimanakah saya boleh mengganggu Claude Code daripada papan kekunci yang tiada kekunci Esc?

Tambahkan bar kekunci. Termux mengkonfigurasi bar itu dengan extra-keys dalam ~/.termux/termux.properties, manakala Termius dan Blink menyediakan bar yang boleh diedit dalam tetapan. Esc mengganggu respons yang sedang berjalan dan mengekalkan kerja yang telah selesai. Ctrl+C juga mengganggu proses, tetapi menekannya dua kali pada gesaan yang tidak aktif akan keluar daripada Claude Code, jadi gunakan Esc terlebih dahulu.

Adakah membuka SSH kepada internet cukup selamat untuk tujuan ini?

Dengan pengesahan kata laluan dimatikan, satu-satunya kelayakan yang boleh berjaya ialah cryptographic key yang tidak pernah meninggalkan peranti anda. Ini merupakan risiko yang munasabah untuk mesin yang boleh anda bina semula. Berikan setiap peranti key tersendiri supaya kehilangan telefon hanya memerlukan anda mengalih keluar satu baris dalam authorized_keys. Jika anda tidak mahu menerima sambungan pada port awam, letakkan mesin itu di belakang WireGuard dan biarkan sshd mendengar pada alamat terowong.