SSD Nodes Learn Hosting plans →
راهنماها Matt Connorتوسط Matt Connor · به‌روزرسانی شده 2026-08-27

آموزش اجرای Claude Code روی گوشی با استفاده از SSH و tmux

برای اجرای Claude Code روی گوشی باید از VPS و tmux استفاده کنید. این راهنما نحوه تنظیم SSH و mosh برای پایداری اتصال و مدیریت پردازش‌ها در سرور را به شما آموزش می‌دهد.

اجرای Claude Code از طریق گوشی: نحوه عملکرد واقعی

اجرای Claude Code از طریق گوشی، یک اپلیکیشن موبایل نیست. Claude Code روی یک VPS (سرور مجازی خصوصی) و درون یک نشست tmux که باز می‌ماند اجرا می‌شود؛ گوشی شما یک اتصال SSH (پوسته امن) به آن نشست برقرار می‌کند و تا زمانی که به آن نگاه می‌کنید، این اتصال برقرار می‌ماند. با بستن اپلیکیشن، عامل (agent) به کار خود ادامه می‌دهد، زیرا پردازش هرگز روی گوشی اجرا نشده است.

این جداسازی، کلِ طراحی سیستم است. سیستم‌عامل گوشی، اپلیکیشن‌ها را چند ثانیه پس از خروج از آن‌ها به حالت تعلیق درمی‌آورد، بنابراین هر کار طولانی که روی گوشی شروع شود، متوقف می‌گردد. همچنین، هر بار که از شبکه Wi-Fi به دیتای موبایل سوئیچ می‌کنید، آدرس شبکه تغییر می‌کند. هر دو مشکل زمانی حل می‌شوند که پردازش روی سرور اجرا شود و گوشی فقط وظیفه نمایش صفحه را بر عهده داشته باشد.

شما به چهار مورد روی سرور نیاز دارید: tmux برای نگهداری نشست، کلیدهای SSH برای ورود، mosh برای مدیریت تغییرات شبکه و خودِ Claude Code. در سمت گوشی، تنها به یک اپلیکیشن ترمینال با ردیف کلیدهای کاربردی نیاز دارید.

آنچه در VPS نیاز دارید

یک سرور کوچک با Ubuntu 24.04 برای بخش‌های SSH و tmux کافی است. Claude Code منابع بیشتری می‌طلبد. طبق الزامات رسمی در ژوئیه 2026، به Ubuntu 20.04 یا جدیدتر روی پردازنده x64 یا ARM64 با حداقل 4 GB رم نیاز دارید. در پلن‌های 1 GB، برنامه نصب می‌شود اما هنگام بارگذاری، پردازش توسط kernel متوقف می‌شود. Claude Code همچنین به یک حساب کاربری پولی Claude (شامل Pro، Max، Team یا Enterprise) یا یک حساب Console با دسترسی API نیاز دارد، زیرا پلن رایگان 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 را در مرورگر باز کرده و کد را به ترمینال برگردانید؛ انجام این کار با جابه‌جایی بین دو برنامه در صفحه گوشی کند است. این کار را یک بار با کیبورد واقعی انجام دهید تا اعتبارنامه‌ها روی سرور باقی بمانند.

اجرای Claude Code درون tmux برای جلوگیری از توقف آن در صورت قطع اتصال

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

با استفاده از Ctrl-b و سپس d از محیط جدا شوید. tmux عبارت [detached (from session claude)] را نمایش داده و کنترل shell را به شما بازمی‌گرداند. اکنون می‌توانید برنامه را ببندید، اتصال شبکه را قطع کنید یا گوشی خود را کنار بگذارید. آن pane همچنان به اجرای خود ادامه می‌دهد.

tmux ls
tmux attach -t claude

دستور tmux ls برای هر session یک خط خروجی می‌دهد، مانند claude: 1 windows (created Thu Jul 30 09:14:02 2026). دستور tmux attach -t claude شما را دقیقاً به همان نقطه‌ای که رها کرده بودید، از جمله ویرایش‌های نیمه‌تمام، بازمی‌گرداند.

این عملکرد به این دلیل است که tmux یک فرایند سرور مستقل اجرا می‌کند و shell شما و Claude Code فرزندان آن سرور هستند، نه فرزندان sshd. هنگامی که اتصال SSH قطع می‌شود، هسته سیستم‌عامل سیگنال hangup یا همان SIGHUP را برای فرایندهای متصل به آن اتصال ارسال می‌کند، اما سرور tmux جزو آن‌ها نیست. بدون tmux، همان قفل صفحه‌ای که باعث قطع اتصال شما می‌شود، Claude Code را در میانه فراخوانی یک ابزار متوقف می‌کند. اجرای Claude Code روی یک VPS درون tmux به بررسی عمیق‌تر چیدمان session می‌پردازد.

دستور tmux را روی سرور اجرا کنید، نه روی گوشی. تایپ کردن tmux درون sessionای که هم‌اکنون به آن متصل هستید، عبارت sessions should be nested with care, unset $TMUX to force را چاپ می‌کند و اجبار به اجرای آن باعث می‌شود دو کلید prefix برای کنترل با یکدیگر تداخل پیدا کنند.

اتصال خودکار در هر ورود

تایپ کردن دستور attach روی صفحه‌کلید لمسی خسته‌کننده است. این دستور را در انتهای ~/.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 متصل می‌شود؛ اگر این نشست وجود داشته باشد به آن وصل می‌شود و در غیر این صورت آن را ایجاد می‌کند، بنابراین یک دستور هر دو حالت را پوشش می‌دهد. exec پوسته ورود (login shell) را با tmux جایگزین می‌کند، بنابراین خروج از tmux به جای بازگرداندن شما به یک خط فرمان ساده، اتصال را می‌بندد. زمانی که به یک پوسته معمولی نیاز دارید، از این فایل صرف‌نظر کنید: ssh you@server -t "bash --noprofile".

آن را در ~/.profile قرار دهید و نه در ~/.bashrc. ~/.bashrc برای نشست‌های غیرتعاملی نیز اجرا می‌شود، بنابراین انتقال فایل‌ها دچار مشکل می‌شود: scp و sftp خروجی غیرمنتظره را به عنوان داده‌های پروتکل می‌خوانند و با خطای Received message too long شکست می‌خورند. ~/.profile فقط برای پوسته‌های ورود اجرا می‌شود که ماهیت یک نشست SSH تعاملی است.

~/.profile همچنین جایی است که اوبونتو ~/.local/bin را به PATH اضافه می‌کند. اگر claude بلافاصله پس از ورود به درستی کار می‌کند اما پوسته داخل tmux خطای command not found را نشان می‌دهد، دلیل آن ترتیب اجراست؛ بنابراین tmux را به جای اسکریپتی که از profile صرف‌نظر می‌کند، از یک پوسته ورود مطابق بالا اجرا کنید.

هر دو برنامه از SSH و mosh پشتیبانی می‌کنند و کلیدها را درون خود ذخیره می‌نمایند. تفاوت اصلی در رابط کاربری آن‌هاست.

Blink Shell مبتنی بر دستور است. در خط فرمان آن، همانند ترمینال دسکتاپ، دستورات ssh you@server یا mosh you@server را تایپ می‌کنید. تنظیمات با تایپ config باز می‌شوند و بخش Keys برای شما یک جفت کلید ایجاد می‌کند.

Termius مبتنی بر فرم است. شما اطلاعات میزبان (host) را وارد می‌کنید و سپس در جزئیات آن، پروتکل را از SSH به Mosh تغییر می‌دهید. Termius پیاده‌سازی اختصاصی خود از mosh را دارد و از نسخه 1.3.0 به بعد پشتیبانی می‌کند، بنابراین همچنان لازم است بسته mosh روی سرور نصب باشد.

در هر دو حالت، کلید را درون خود برنامه تولید کنید و هرگز کلید خصوصی موجود را روی گوشی کپی نکنید. برنامه بخش عمومی کلید (public key) را به شما نشان می‌دهد که یک خط واحد است و باید آن را به فایل ~/.ssh/authorized_keys روی سرور اضافه کنید. مطلب کلیدهای SSH مختص هر دستگاه و نحوه ابطال آن‌ها به نحوه نام‌گذاری و مراحل ابطال می‌پردازد که برای گوشی اهمیت بیشتری نسبت به لپ‌تاپ دارد.

قفل بیومتریک یا رمز عبور خودِ برنامه ترمینال را فعال کنید. بدون این کار، اگر گوشی باز باشد، تا زمانی که صفحه روشن است، یک شل (shell) باز به سرور شما در دسترس خواهد بود.

اندروید: 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 متصل شوید.

صفحه‌کلید مجازی اندروید فاقد کلیدهای 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 را اجرا کنید تا ردیف کلیدها بالای صفحه‌کلید ظاهر شود. همین دستور reload، فونت TrueType با عرض ثابت (monospace) که در مسیر ~/.termux/font.ttf قرار داده‌اید را نیز بارگذاری می‌کند.

ممکن است اندروید در زمان فعالیت Termux در پس‌زمینه، آن را متوقف کند؛ در این سناریو، این اتفاق تنها منجر به قطع اتصال می‌شود و هیچ داده‌ای از دست نمی‌رود. نشست (session) و عامل (agent) روی سرور باقی می‌مانند.

چرا وقتی از شبکه Wi-Fi خارج می‌شوم ترمینال قفل می‌کند و mosh چه مشکلی را حل می‌کند؟

اتصال SSH یک اتصال TCP (پروتکل کنترل انتقال) است و یک اتصال TCP با هر دو آدرس و هر دو پورت شناسایی می‌شود. وقتی از محدوده Wi-Fi خارج می‌شوید، گوشی آدرس جدیدی از شبکه موبایل دریافت می‌کند، بنابراین اتصال قدیمی در هیچ‌کدام از دو طرف معتبر نیست. هیچ سیگنالی هم این تغییر را اعلام نمی‌کند. ترمینال تا زمانی که TCP تسلیم شود پاسخ نمی‌دهد و سپس ssh پیام client_loop: send disconnect: Broken pipe را چاپ می‌کند. برای بستن فوری یک نشست قفل‌شده، کلیدهای Enter، سپس ~ و بعد . را فشار دهید.

ابزار mosh (مخفف mobile shell) این حالت شکست را حذف می‌کند. این ابزار یک بار از SSH برای ورود و اجرای پردازش mosh-server استفاده می‌کند، پورت UDP (پروتکل دیتاگرام کاربر) انتخاب‌شده توسط سرور را می‌خواند و اتصال SSH را می‌بندد. پس از آن، دو طرف دیتاگرام‌های UDP را که با یک کلید نشست مشترک احراز هویت شده‌اند مبادله می‌کنند؛ بنابراین نشست با آن کلید شناسایی می‌شود، نه با آدرس شما. آدرس جدید به‌سادگی به کار خود ادامه می‌دهد. mosh همچنین تایپ شما را به‌صورت محلی نمایش می‌دهد و در صورت مغایرت با سرور، صفحه را بازنویسی می‌کند؛ به همین دلیل است که روی لینک‌های موبایل کند نیز قابل‌استفاده باقی می‌ماند.

ابزار mosh از یک پورت UDP بین 60000 و 61000 استفاده می‌کند، بنابراین این محدوده را باز کنید:

sudo ufw allow 60000:61000/udp
sudo ufw status

باز کردن پورت‌ها با ufw بقیه جزئیات فایروال را پوشش می‌دهد. اگر ارائه‌دهنده شما یک فایروال شبکه مجزا در پنل کنترل خود ارائه می‌دهد، همان محدوده را در آنجا نیز اضافه کنید، زیرا یک قانون ufw نمی‌تواند بر فیلتری که پیش از ماشین قرار دارد تأثیر بگذارد.

دو مورد از خطاهای رایج mosh وجود دارد. ورودی که موفقیت‌آمیز است اما سپس قفل می‌شود و Nothing received from server on UDP port 60001. را نشان می‌دهد، به این معنی است که محدوده UDP در جایی بین گوشی و سرور مسدود شده است. اتصالی که گزارش می‌دهد mosh-server یافت نشد، به این معنی است که بسته روی سرور نصب نیست یا در PATH ورود وجود ندارد. آن را نصب کنید یا با mosh --server=/usr/bin/mosh-server you@server مستقیماً به آن اشاره کنید.

همچنین mosh زمانی که locale ورود UTF-8 نباشد اجرا نمی‌شود و این پیام را می‌دهد: mosh-server needs a UTF-8 native locale to run. locale را روی سرور اصلاح کنید، نه روی گوشی.

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

دو کاری که mosh انجام نمی‌دهد: فایل README آن بیان می‌کند که mosh از X forwarding یا استفاده‌های غیرتعاملی SSH، از جمله port forwarding پشتیبانی نمی‌کند؛ بنابراین برای پیش‌نمایش یک وب‌اپلیکیشن که Claude Code به‌تازگی راه‌اندازی کرده است، همچنان به ssh -L 8080:127.0.0.1:8080 you@server معمولی نیاز دارید. همچنین mosh فقط صفحه قابل‌مشاهده را همگام‌سازی می‌کند، بنابراین قابلیت scrollback داخلی ندارد. این محدودیت دوم در اینجا هزینه‌ای ندارد، زیرا tmux قابلیت scrollback را حفظ می‌کند: 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 کشیدن انگشت (drag) را به اسکرول و ضربه زدن (tap) را به انتخاب پنل یا پنجره تبدیل می‌کند؛ این کار جایگزین اکثر کلیدهای پیشوندی (prefix keys) می‌شود که تایپ کردن آن‌ها دشوار است. status-position top خط وضعیت tmux را از لبه پایینی صفحه که توسط کیبورد مجازی و نوار پیشنهاد کلمات پوشانده می‌شود، جابه‌جا می‌کند. default-terminal اهمیت دارد، زیرا در غیر این صورت tmux یک ترمینال screen را به Claude Code معرفی می‌کند و رنگ‌ها و ترسیم کادرها (box drawing) کیفیت مطلوبی نخواهند داشت. اگر tmux با خطای missing or unsuitable terminal: tmux-256color اجرا نشد، یعنی ورودی terminfo موجود نیست: sudo apt install ncurses-term.

چهار کلید را یاد بگیرید تا بقیه کار راحت شود.

  • Esc پاسخ Claude را در میانه راه متوقف می‌کند و کارهای انجام‌شده تا آن لحظه را حفظ می‌کند؛ بنابراین این کلیدی است که می‌خواهید به انگشت شست شما نزدیک‌تر باشد.
  • Ctrl+C نیز یک عملیات در حال اجرا را متوقف می‌کند. در حالت prompt خالی، اولین بار ورودی را پاک می‌کند و دومین بار از Claude Code خارج می‌شود؛ بنابراین ابزار خشن‌تری است.
  • Esc با دو بار فشردن، یک prompt پیش‌نویس را پاک می‌کند و در حالت prompt خالی، منوی rewind را باز می‌کند.
  • برای یک prompt چندخطی، \ را تایپ کرده و سپس Enter بزنید. این روش در هر ترمینالی کار می‌کند. ترکیب Shift+Enter فقط در لیست کوتاهی از ترمینال‌های دسکتاپ به‌صورت بومی پشتیبانی می‌شود و کلاینت‌های موبایل جزو آن‌ها نیستند.

از تقسیم پنل‌ها (split panes) خودداری کنید. عرض گوشی در حالت عمودی حدود 40 ستون است، بنابراین یک تقسیم عمودی، 20 ستون برای هر پنل باقی می‌گذارد و هر diff به شکلی نامفهوم می‌شکند. به‌جای آن از پنجره‌های tmux استفاده کنید: Ctrl-b c یک پنجره جدید می‌سازد و Ctrl-b n به پنجره بعدی می‌رود. اگر در پنجره دوم یک session دیگر از Claude Code باز باشد، این دو session می‌توانند مستقیماً کارها را به یکدیگر بسپارند؛ به‌جای اینکه شما بخواهید متن را بین پنجره‌ها روی صفحه لمسی کپی کنید. هرگاه نیاز داشتید یک diff را به‌درستی بخوانید، گوشی را افقی بگیرید.

مقدار متنی که روی آن صفحه نمایش داده می‌شود، ارزش دارد آگاهانه تنظیم شود، زیرا یک سبک خروجی system prompt را پشت هر پاسخ ویرایش می‌کند و انتخاب سبک موجزتر یعنی در تلفن باید صفحه‌های کمتری را پیمایش کنید.

یک session طولانی روی صفحه کوچک، عمدتاً یک مسئله مدیریت context است؛ بنابراین مدیریت پنجره context در Claude Code ارزش خواندن دارد، پیش از آنکه بخواهید یک روز کاری کامل را از داخل قطار انجام دهید.

امن‌سازی: فقط کلید، بدون رمز عبور

اکنون گوشی شما حاوی کلیدی است که به ماشینی دسترسی دارد که کد شما را ویرایش کرده و دستورات را اجرا می‌کند. احراز هویت با رمز عبور را غیرفعال کنید. استفاده از یک فایل drop-in ایمن‌تر از ویرایش مستقیم sshd_config است، زیرا sshd_config در اوبونتو شامل /etc/ssh/sshd_config.d/*.conf در ابتدای فایل است و اولین مقداری که برای یک تنظیم پیدا شود، اعمال می‌گردد.

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 فایل پیکربندی را تحلیل می‌کند و در صورت معتبر بودن، خروجی خاصی نمایش نمی‌دهد. از این مرحله صرف‌نظر نکنید، چرا که یک غلط تایپی باعث می‌شود sshd هنگام بارگذاری مجدد با خطا مواجه شود. نشست کاری فعلی خود را باز نگه دارید و پیش از بستن هر چیزی، از یک اتصال دوم تست بگیرید؛ زیرا یک کلید اشتباه اکنون منجر به Permission denied (publickey). می‌شود و با غیرفعال بودن رمز عبور، هیچ راه بازگشتی نخواهید داشت. در آن وضعیت، تنها راه بازیابی، کنسول ارائه‌دهنده سرور شماست.

برای هر دستگاه یک کلید مجزا در نظر بگیرید. در این صورت، گم شدن گوشی فقط به معنای حذف یک خط از ~/.ssh/authorized_keys است و لپ‌تاپ شما همچنان کار می‌کند. استفاده از یک کلید مشترک به این معنی است که باید کلید را در تمام دستگاه‌های خود تغییر دهید.

اگر در اوبونتو 24.04 پورت SSH را تغییر می‌دهید، توجه داشته باشید که listener متعلق به ssh.socket است، بنابراین یک خط Port به‌تنهایی تغییری ایجاد نمی‌کند. دستور sudo systemctl edit ssh.socket را اجرا کنید، مقدار پیش‌فرض را با یک ListenStream= خالی پاک کنید و سپس پورت خود را در خط بعدی تنظیم نمایید. ایمن‌سازی SSH روی VPS این موضوع و سایر سطوح امنیتی را پوشش می‌دهد.

استفاده از fail2ban برای SSH پس از غیرفعال کردن رمزهای عبور، امنیت چندانی اضافه نمی‌کند، زیرا رمز عبور حدس‌زده‌شده به هیچ وجه پذیرفته نمی‌شود. آنچه این ابزار اضافه می‌کند، خلوت‌تر شدن لاگ‌ها است که باعث می‌شود تلاش‌های واقعی برای ورود به‌راحتی قابل تشخیص باشند.

گزینه قوی‌تر این است که SSH را از دسترس اینترنت عمومی خارج کنید. سرور را پشت یک VPN WireGuard که خودتان میزبانی می‌کنید قرار دهید، تونل را در صورت نیاز روی گوشی فعال کنید و برای sshd یک ListenAddress فقط روی تونل تنظیم نمایید. mosh روی این تونل کار می‌کند زیرا هر دو سمت از پروتکل UDP استفاده می‌کنند. یک نکته: تونل سربار بسته‌ها را افزایش می‌دهد، بنابراین اگر انتقال‌های بزرگ متوقف شدند، مقدار MTU (حداکثر واحد انتقال) را در پیکربندی WireGuard گوشی کاهش دهید.

نکته آخر در مورد کار به این شیوه: از طریق گوشی، شما درخواست‌های مجوز را روی صفحه‌ای تأیید می‌کنید که در هر لحظه فقط چند خط از تغییرات (diff) را نشان می‌دهد. این دلیلی است برای حفظ محافظ‌ها به‌جای غیرفعال کردن آن‌ها. اجرای ایمن Claude Code روی VPS محدودیت‌های کاربر و دایرکتوری را که پیش از تبدیل شدن صفحه لمسی به راه اصلی ورود شما باید تنظیم شوند، بررسی می‌کند.

When you reattach and something is wrong

tmux attach printing no server running on /tmp/tmux-1000/default means the tmux server is gone, which nearly always means the machine rebooted. Check with uptime. Kernel updates from automatic security updates reboot the box, and a rebooted box has no tmux session, so treat any Claude Code run as something you can restart.

can't find session: claude is different. The tmux server is running but that name is not there. tmux ls shows what does exist.

If you attach and find a plain shell prompt where Claude Code used to be, the process ended without the session ending. Look at dmesg -T | tail for a line like Out of memory: Killed process 4821 (claude), which is what a box below the 4 GB requirement does during a large edit. No such line means Claude Code exited on its own, and the shell's scrollback above the prompt holds the reason.

A window that comes back tiny, with unused space around it, means two clients are attached at different sizes, because tmux sizes a window to fit the smallest attached client. Your laptop is still holding the session at 200 columns wide while the phone asks for 40. Detach the others as you attach: tmux attach -d -t claude.

FAQ

آیا می‌توانم Claude Code را به‌جای VPS، مستقیماً روی گوشی اجرا کنم؟

خیر. پلتفرم‌های پشتیبانی‌شده تا ژوئیه 2026 عبارتند از macOS، Windows، Ubuntu 20.04 یا جدیدتر، Debian 10 یا جدیدتر، و Alpine 3.19 یا جدیدتر، با حداقل 4 گیگابایت رم. Android و iOS در این لیست نیستند. همچنین گوشی‌ها برنامه‌ها را به حالت خواب می‌برند و آدرس شبکه را دائماً تغییر می‌دهند؛ شرایطی که اجرای طولانی‌مدت یک agent نمی‌تواند آن را تحمل کند. آن را روی یک سرور اجرا کنید و از گوشی فقط به‌عنوان نمایشگر استفاده کنید.

اگر برنامه را ببندم یا سیگنال قطع شود، نشست (session) باقی می‌ماند؟

بله، و دو بخش مجزا این کار را انجام می‌دهند. tmux پردازش را روی سرور فعال نگه می‌دارد، بنابراین با قطع اتصال، چیزی متوقف نمی‌شود. mosh اتصال را در حین تغییر آدرس زنده نگه می‌دارد، بنابراین جابه‌جایی از wifi به دیتای موبایل حتی نیازی به اتصال مجدد ندارد. با SSH معمولی و بدون tmux، قطع اتصال باعث ارسال SIGHUP شده و Claude Code در میانه کار متوقف می‌شود.

چرا mosh متصل می‌شود اما چیزی نمایش نمی‌دهد؟

ورودی که موفقیت‌آمیز است اما با Nothing received from server on UDP port 60001. متوقف می‌شود، به این معناست که بازه UDP 60000 تا 61000 باز نیست. این بازه را در ufw اضافه کنید و دوباره در فایروال شبکه ارائه‌دهنده خود نیز اعمال کنید؛ این فایروال در اکثر پنل‌ها یک کنترل مجزا است. اگر mosh گزارش دهد که mosh-server یافت نشد، یعنی سرور فاقد بسته مورد نیاز است: sudo apt install mosh.

چگونه Claude Code را با کیبوردی که کلید Esc ندارد متوقف کنم؟

یک ردیف کلید اضافه کنید. Termux با استفاده از extra-keys در ~/.termux/termux.properties این کار را پیکربندی می‌کند و Termius و Blink هر دو ردیفی دارند که می‌توانید در تنظیمات ویرایش کنید. Esc پاسخ در حال اجرا را متوقف می‌کند و کارهای انجام‌شده را حفظ می‌کند. Ctrl+C نیز متوقف می‌کند، اما فشردن آن برای دو بار در حالت idle باعث خروج از Claude Code می‌شود، بنابراین ابتدا از Esc استفاده کنید.

آیا باز کردن SSH به روی اینترنت برای این کار به اندازه کافی امن است؟

با غیرفعال کردن احراز هویت رمز عبور، تنها اعتبارنامه‌ای که می‌تواند موفق باشد، کلیدی است که هرگز دستگاه شما را ترک نمی‌کند؛ این ریسکی منطقی برای ماشینی است که می‌توانید دوباره آن را بسازید. برای هر دستگاه یک کلید مجزا در نظر بگیرید تا در صورت گم شدن گوشی، فقط نیاز باشد یک خط را در authorized_keys حذف کنید. اگر ترجیح می‌دهید اصلاً روی پورت عمومی پاسخ ندهید، سرور را پشت WireGuard قرار دهید و اجازه دهید sshd روی آدرس تونل گوش دهد.