Dùng Claude Code từ điện thoại qua SSH và tmux
Claude Code chạy trong tmux trên VPS, còn điện thoại chỉ mở cửa sổ SSH. Bạn sẽ biết cách dùng SSH keys, mosh khi mạng chập chờn và sửa bàn phím.
Claude Code trên điện thoại: cách hoạt động thực tế
Hướng dẫn này sử dụng một terminal app trên điện thoại. Claude Code chạy trên một VPS (virtual private server), bên trong một tmux session luôn mở, còn điện thoại mở kết nối SSH (secure shell) đến session đó trong thời gian bạn đang theo dõi. Khi đóng app, agent vẫn tiếp tục làm việc vì process chưa từng chạy trên điện thoại.
Claude Code cũng có Remote Control: chạy /remote-control bên trong một session để sử dụng Claude Code qua mobile app của Claude hoặc trình duyệt, trong khi process vẫn chạy trên server.
Đó là toàn bộ thiết kế. Hệ điều hành trên điện thoại sẽ suspend một app vài giây sau khi bạn chuyển sang app khác, nên mọi job chạy lâu được khởi động trên điện thoại sẽ dừng. Điện thoại cũng nhận một địa chỉ mạng mới mỗi khi bạn chuyển từ wifi sang dữ liệu di động. Cả hai vấn đề này đều biến mất khi process chạy trên server và điện thoại chỉ hiển thị màn hình.
Bạn cần 4 thứ trên server: tmux để giữ session, SSH keys để đăng nhập, mosh để xử lý thay đổi mạng và chính Claude Code. Phía điện thoại chỉ cần một terminal app có key row mà bạn có thể mở nhanh.
Những gì bạn cần trên VPS
Một máy Ubuntu 24.04 cấu hình nhỏ là đủ cho phần SSH và tmux. Claude Code yêu cầu nhiều hơn. Theo yêu cầu chính thức tính đến tháng 10 năm 2026, máy cần chạy Ubuntu 20.04 trở lên trên bộ xử lý x64 hoặc ARM64, với ít nhất 4 GB RAM. Claude Code cũng cần một tài khoản Claude trả phí (Pro, Max, Team hoặc Enterprise), một tài khoản Console có quyền truy cập API, hoặc quyền truy cập thông qua cloud provider được hỗ trợ như Amazon Bedrock, vì gói Claude.ai miễn phí không bao gồm Claude Code.
Thiết lập máy bằng một user thông thường có sudo, không dùng root. Nếu server mới, trước tiên hãy làm theo 10 phút đầu tiên trên một VPS mới, vì các thay đổi SSH ở phần sau của hướng dẫn này sẽ dễ thực hiện hơn khi user và firewall đã tồn tại.
sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --versionInstaller đặt binary tại ~/.local/bin/claude, và claude --version in ra một dòng dạng 2.1.211 (Claude Code). Nếu nó in ra command not found, thư mục đó chưa có trong PATH của bạn: hãy đăng xuất, đăng nhập lại, rồi kiểm tra bằng command -v claude. claude doctor in ra chẩn đoán về cài đặt và settings mà không khởi động một session.
Bây giờ hãy đăng nhập một lần từ laptop, trước khi phụ thuộc vào điện thoại. Chạy claude trong một thư mục project và làm theo login prompt. Quy trình này yêu cầu bạn mở một URL trong trình duyệt rồi đưa code trở lại terminal. Thực hiện việc đó trên màn hình điện thoại bằng cách chuyển qua lại giữa hai app sẽ chậm. Hãy làm một lần bằng bàn phím thực, sau đó credentials sẽ được lưu trên server.
Khởi động Claude Code bên trong tmux để kết nối bị ngắt không thể dừng tiến trình
tmux new -s claude
cd ~/projects/api
claudeNhấn Ctrl-b để detach, sau đó nhấn d. tmux in [detached (from session claude)] rồi trả bạn về shell. Bây giờ bạn có thể đóng ứng dụng, mất sóng hoặc bỏ điện thoại vào túi. Pane vẫn tiếp tục chạy.
tmux ls
tmux attach -t claudetmux ls in một dòng cho mỗi session, chẳng hạn như claude: 1 windows (created Thu Jul 30 09:14:02 2026). tmux attach -t claude đưa bạn trở lại đúng vị trí trước đó, bao gồm cả phần chỉnh sửa đang làm dở.
Cách này hoạt động vì tmux chạy một server process riêng. Shell và Claude Code là các process con của server đó, không phải của sshd. Khi kết nối SSH kết thúc, kernel gửi tín hiệu hangup, SIGHUP, đến các process gắn với kết nối đó. tmux server không nằm trong số đó. Nếu không dùng tmux, việc khóa màn hình làm rớt kết nối cũng sẽ dừng Claude Code giữa chừng khi đang gọi tool. Chạy Claude Code trên VPS bên trong tmux trình bày chi tiết hơn về cách bố trí session.
Chạy tmux trên server, không chạy trên điện thoại. Gõ tmux bên trong một session mà bạn đã attach sẽ in sessions should be nested with care, unset $TMUX to force. Nếu ép chạy, bạn sẽ có hai phím prefix tranh nhau.
Tự động attach trong mỗi lần đăng nhập
Gõ lệnh attach trên bàn phím cảm ứng sẽ nhanh chóng trở nên bất tiện. Thêm đoạn này vào cuối ~/.profile trên server:
if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
exec tmux new-session -A -s claude
finew-session -A -s claude attach vào session có tên claude nếu session đó tồn tại, và tạo session nếu chưa có. Vì vậy, một lệnh xử lý được cả hai trường hợp. exec thay thế login shell bằng tmux, nên khi thoát tmux, kết nối sẽ đóng thay vì đưa bạn về một prompt trống. Khi cần shell thông thường, bỏ qua file này: ssh you@server -t "bash --noprofile".
Đặt đoạn này trong ~/.profile, không đặt trong ~/.bashrc. Bash cũng đọc ~/.bashrc cho các lệnh SSH không tương tác, nhưng điều kiện [ -t 1 ] ở trên ngăn block này khởi động tmux trong lúc truyền file. Các lệnh khởi động không có điều kiện bảo vệ mà in output sẽ làm hỏng giao thức truyền file với các lỗi như Received message too long. ~/.profile chỉ chạy cho login shell, đúng với một phiên SSH tương tác.
~/.profile cũng là nơi Ubuntu thêm ~/.local/bin vào PATH. Nếu claude hoạt động ngay sau khi đăng nhập nhưng shell bên trong tmux báo command not found, thứ tự đọc file đó là nguyên nhân. Vì vậy, hãy khởi động tmux từ login shell như trên thay vì từ một script bỏ qua profile.
iOS: Termius hoặc Blink Shell
Cả hai app đều hỗ trợ SSH và mosh, đồng thời lưu key trong app. Điểm khác biệt là giao diện.
Blink Shell hoạt động bằng command. Tại prompt, bạn nhập ssh you@server hoặc mosh you@server, dùng cùng cú pháp như terminal trên desktop. Mở phần cài đặt bằng cách nhập config. Trong mục Keys, app sẽ tạo một cặp key cho bạn.
Termius hoạt động qua form. Bạn điền thông tin host, rồi chuyển host đó từ SSH sang Mosh trong phần chi tiết của host. Termius tích hợp sẵn implementation của mosh và hỗ trợ mosh 1.3.0 trở lên, nên server vẫn cần cài package mosh.
Trong cả hai trường hợp, hãy tạo key ngay trong app và không bao giờ copy private key có sẵn vào điện thoại. App sẽ hiển thị public key. Đây là một dòng duy nhất mà bạn thêm vào ~/.ssh/authorized_keys trên server. Key SSH theo từng thiết bị và cách revoke một key trình bày cách đặt tên và revoke key. Việc này quan trọng với điện thoại hơn laptop.
Hãy bật biometric lock hoặc passcode lock của terminal app. Nếu không, điện thoại đang mở khóa sẽ trở thành một shell mở vào server của bạn trong suốt thời gian màn hình còn sáng.
Android: Termux
pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pubTermux cung cấp OpenSSH và mosh trong repository riêng, nên ssh, ssh-keygen và mosh hoạt động giống trên máy tính desktop. Thêm dòng public key đã in vào ~/.ssh/authorized_keys trên server, rồi kết nối bằng mosh you@server.
Bàn phím trên màn hình Android không có phím Esc và Ctrl, trong khi Claude Code cần cả hai. Termux có thể hiển thị một hàng phím riêng. Thêm một dòng vào ~/.termux/termux.properties:
extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]Sau đó chạy termux-reload-settings, hàng phím sẽ xuất hiện phía trên bàn phím. Lần reload này cũng nhận font TrueType monospace được đặt tại ~/.termux/font.ttf.
Android có thể dừng Termux khi ứng dụng chạy nền. Trong trường hợp này, bạn chỉ cần kết nối lại. Session và agent vẫn chạy trên server.
Vì sao terminal bị treo khi tôi rời khỏi Wi-Fi, và mosh khắc phục điều gì?
Kết nối SSH là kết nối TCP (giao thức điều khiển truyền tải), và một kết nối TCP được xác định bằng cả hai địa chỉ và cả hai cổng. Khi bạn đi ra khỏi vùng phủ Wi-Fi, điện thoại nhận một địa chỉ mới từ mạng di động, nên kết nối cũ không còn khớp ở cả hai đầu. Không có thông báo nào cho biết điều này. Terminal chỉ ngừng phản hồi cho đến khi TCP từ bỏ kết nối, rồi ssh in ra client_loop: send disconnect: Broken pipe. Để đóng ngay một phiên bị treo, nhấn Enter, sau đó ~, rồi ..
mosh (mobile shell) loại bỏ kiểu lỗi này. Nó dùng SSH một lần để đăng nhập và khởi động tiến trình mosh-server, đọc lại cổng UDP (giao thức gói dữ liệu người dùng) mà server đã chọn, rồi đóng kết nối SSH. Sau đó, hai đầu trao đổi các UDP datagram được xác thực bằng session key dùng chung, nên phiên được xác định bằng key đó thay vì địa chỉ của bạn. Khi địa chỉ thay đổi, phiên vẫn tiếp tục. mosh cũng echo nội dung bạn gõ ngay trên máy cục bộ và vẽ lại màn hình khi server trả về kết quả khác, nên vẫn sử dụng được trên kết nối di động chậm.
mosh sử dụng một cổng UDP trong khoảng từ 60000 đến 61000, vì vậy hãy mở khoảng cổng này:
sudo ufw allow 60000:61000/udp
sudo ufw statusMở cổng bằng ufw trình bày phần còn lại của cấu hình firewall. Nếu nhà cung cấp có network firewall riêng trong control panel, hãy thêm cùng khoảng cổng ở đó, vì rule ufw không thể tác động đến một bộ lọc nằm phía trước máy chủ.
Có hai lỗi mosh thường gặp. Đăng nhập thành công rồi bị treo và hiển thị Nothing received from server on UDP port 60001. nghĩa là mosh-server đã khởi động nhưng client không thể kết nối đến tiến trình đó trên cổng UDP. Nguyên nhân thường là một firewall nào đó giữa điện thoại và server đang chặn UDP trong khoảng cổng mosh. Nếu kết nối báo không tìm thấy mosh-server thì package này chưa được cài trên server hoặc không có trong PATH đăng nhập. Hãy cài package đó hoặc trỏ trực tiếp đến nó bằng mosh --server=/usr/bin/mosh-server you@server.
Nếu locale đăng nhập của server không phải UTF-8, mosh-server sẽ thử dùng các thiết lập locale do client cung cấp rồi kiểm tra lại. Nó chỉ từ chối chạy nếu cách này cũng không cung cấp được UTF-8 và báo mosh-server needs a UTF-8 native locale to run. Hãy sửa locale trên server trước.
locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8Cả hai đầu đều cần locale UTF-8, và mosh-server cũng áp dụng các thiết lập locale mà client gửi. Nếu lỗi vẫn còn sau khi sửa server, hãy đặt LANG thành một giá trị UTF-8 trong terminal app trên điện thoại; FAQ của mosh cũng lưu ý rằng mosh-client có thể cần thiết.
mosh không thực hiện được hai việc. README của nó nêu rằng mosh không hỗ trợ X forwarding hoặc các cách sử dụng SSH không tương tác, bao gồm port forwarding. Vì vậy, để preview web app mà Claude Code vừa khởi động, bạn vẫn cần dùng ssh -L 8080:127.0.0.1:8080 you@server thông thường. mosh cũng chỉ đồng bộ phần màn hình đang hiển thị, nên không có scrollback riêng. Giới hạn thứ hai không gây vấn đề ở đây vì tmux giữ scrollback: Ctrl-b rồi [ để vào copy mode, dùng thao tác kéo hoặc các phím mũi tên để cuộn, và q để thoát.
Làm cho màn hình điện thoại dễ sử dụng
Bốn dòng trong ~/.tmux.conf trên server đảm nhiệm phần lớn công việc:
set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000mouse on biến thao tác kéo bằng cảm ứng thành cuộn và thao tác chạm thành chọn pane hoặc window, thay thế phần lớn các phím prefix khó nhập. status-position top đưa dòng trạng thái của tmux ra khỏi mép dưới, nơi bàn phím trên màn hình và thanh gợi ý che mất nó. default-terminal cố định tên terminal mà tmux thông báo cho Claude Code. Nếu không có dòng này, tmux sẽ thông báo bất kỳ tên nào mà bản build của nó chọn. Script configure của tmux 3.4 bắt đầu từ screen, sau đó kiểm tra screen-256color, tmux và tmux-256color theo thứ tự đó; nếu một lần kiểm tra thất bại, nó giữ lại lựa chọn trước đó. Vì vậy, bản build không tìm thấy entry terminfo tmux-256color sẽ dùng tmux, screen-256color hoặc chỉ screen, khiến màu sắc và ký tự vẽ khung có thể hiển thị kém hơn mức cần thiết.
Hãy nhớ bốn phím này, sau đó mọi việc sẽ dễ hơn.
Escngắt Claude giữa chừng khi Claude đang trả lời và giữ lại phần việc đã hoàn thành, nên đây là phím bạn muốn đặt gần ngón cái nhất.Ctrl+Ccũng ngắt một operation đang chạy. Khi prompt đang chờ lệnh, lần nhấn đầu tiên xóa nội dung nhập và lần nhấn thứ hai thoát Claude Code, nên đây là công cụ mạnh tay hơn.- Nhấn
Eschai lần để xóa prompt nháp; khi prompt trống, tổ hợp này sẽ mở menu rewind. - Với prompt nhiều dòng, nhập
\rồi nhấn Enter. Cách này hoạt động trong mọi terminal. Shift+Enter chỉ hoạt động native trên một danh sách ngắn các terminal desktop, và các mobile client không nằm trong danh sách đó.
Tránh dùng split pane. Điện thoại ở chế độ dọc chỉ rộng khoảng 40 cột, nên split dọc để lại 20 cột cho mỗi pane và mọi diff đều bị wrap thành một mớ khó đọc. Thay vào đó, hãy dùng tmux window: Ctrl-b c tạo một window và Ctrl-b n chuyển sang window tiếp theo. Nếu window thứ hai có session Claude Code riêng, hai session có thể trực tiếp chuyển công việc cho nhau thay vì bạn phải sao chép text giữa các window trên màn hình cảm ứng. Xoay ngang điện thoại khi cần đọc diff cho đúng.
Bạn nên chủ động đặt lượng text hiển thị trên màn hình này, vì output style chỉnh sửa system prompt phía sau mỗi câu trả lời và style ngắn gọn hơn sẽ giúp giảm số màn hình cần cuộn qua trên điện thoại.
Một session dài trên màn hình nhỏ chủ yếu là vấn đề về context, vì vậy quản lý context window của Claude Code là nội dung bạn nên đọc trước khi thử làm việc cả ngày trên tàu.
Khóa chặt: chỉ dùng key, không dùng password
Điện thoại hiện giữ một key để truy cập máy chủ có thể chỉnh sửa code và chạy lệnh. Hãy tắt xác thực bằng password. Dùng file drop-in an toàn hơn sửa trực tiếp sshd_config, vì sshd_config của Ubuntu include /etc/ssh/sshd_config.d/*.conf ở đầu file và hệ thống sẽ dùng giá trị đầu tiên tìm thấy cho một thiết lập.
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 sshDrop-in được đọc theo thứ tự tên file. Kiểm tra sudo sshd -T để tìm passwordauthentication no, kbdinteractiveauthentication no, pubkeyauthentication yes và permitrootlogin no; nếu một file đứng trước thiết lập một trong các giá trị này, giá trị đó sẽ được ưu tiên và bạn phải sửa tại file đó.
sshd -t phân tích config và không in gì nếu config hợp lệ. Nếu bỏ qua bước này, chỉ một lỗi typo cũng khiến sshd fail khi reload. Giữ nguyên phiên làm việc hiện tại và test từ một connection thứ hai trước khi đóng bất cứ thứ gì, vì key sai sẽ khiến bạn nhận Permission denied (publickey). và khi đã tắt password thì không còn đường dự phòng. Khi đó, cách khôi phục là dùng console của provider. Nếu connection test đó thực sự fail, hãy kết nối lại bằng ssh -v và xử lý trong khi session đầu tiên vẫn còn mở, vì một thông báo lỗi đó có thể chỉ ra năm lỗi riêng biệt và output verbose sẽ cho biết bạn đang gặp lỗi nào.
Mỗi thiết bị nên có key riêng. Nếu mất điện thoại, bạn chỉ cần xóa một dòng trong ~/.ssh/authorized_keys, còn laptop vẫn hoạt động. Nếu dùng chung một key, bạn phải thay key trên mọi thiết bị mình sở hữu.
Nếu chuyển SSH sang cổng khác trên Ubuntu 24.04, hãy lưu ý listener thuộc về ssh.socket. Một systemd generator tạo socket đó từ dòng Port trong SSH config, nên bạn không cần một override ListenStream, nhưng chỉ restart ssh sẽ khiến server vẫn listening trên cổng 22. Đặt dòng Port trong một drop-in, cho phép cổng mới trong ufw, rồi chạy sudo systemctl daemon-reload và tiếp theo là sudo systemctl restart ssh.socket. Hardening SSH trên VPS trình bày nội dung này cùng các phần còn lại của bề mặt tấn công.
fail2ban cho SSH không tăng nhiều bảo mật khi đã tắt password, vì password bị đoán cũng hoàn toàn không thể được chấp nhận. Tác dụng thêm của nó là giúp log yên tĩnh hơn, nhờ đó bạn dễ phát hiện một lần đăng nhập thực sự hơn.
Lựa chọn mạnh hơn là không để SSH trên public internet. Đặt server phía sau một WireGuard VPN do bạn tự host, bật tunnel trên điện thoại khi cần, và chỉ cấp cho sshd một ListenAddress trên tunnel. mosh hoạt động qua tunnel vì cả hai đầu đều dùng UDP. Có một điểm cần lưu ý: tunnel làm tăng packet overhead, nên nếu các lần truyền file lớn bị stalled, hãy giảm MTU (maximum transmission unit) trong WireGuard config trên điện thoại.
Một điểm cuối cùng về cách làm này. Khi dùng điện thoại, bạn phê duyệt các permission prompt trên màn hình chỉ hiển thị vài dòng diff mỗi lần. Đây là lý do để giữ các guardrail, không phải để tắt chúng. Đồng thời, hãy kiểm tra session của bạn khởi động với permission mode nào, vì auto mode hiện là mode khởi động tích hợp sẵn cho các interactive terminal session từ Claude Code v2.1.283, và mode này thực hiện chỉnh sửa file trong working directory mà không dừng lại để hỏi bạn. Chạy Claude Code an toàn trên VPS trình bày các giới hạn về user và directory nên thiết lập trước khi touchscreen trở thành cách chính để bạn truy cập hệ thống.
Khi attach lại và có vấn đề
tmux attach in ra no server running on /tmp/tmux-1000/default nghĩa là tmux không tìm thấy server trên socket đó. Thông thường server đã mất, gần như luôn là do máy đã reboot. Kiểm tra bằng uptime. Nếu máy không reboot và pgrep tmux vẫn hiển thị một server, điều đó chưa đủ để kết luận file socket đã bị xóa, vì các flag -L và -S cho phép server lắng nghe trên một socket khác. Nếu bạn khởi động tmux với một trong các flag đó, hãy truyền cùng flag cho tmux attach. Nếu socket thực sự bị xóa do nhầm lẫn, pkill -USR1 tmux yêu cầu server tạo lại socket. Manual của tmux lưu ý thao tác này sẽ fail nếu thiếu bất kỳ thư mục cha nào. Các bản cập nhật kernel từ bản cập nhật bảo mật tự động cần reboot để có hiệu lực, nhưng unattended-upgrades chỉ tự reboot khi Unattended-Upgrade::Automatic-Reboot được bật; giá trị mặc định của tùy chọn này là false. Máy đã reboot sẽ không còn tmux session, vì vậy hãy coi mọi lần chạy Claude Code là một tác vụ có thể khởi động lại.
can't find session: claude có ý nghĩa khác. tmux server vẫn đang chạy, nhưng không có session nào mang tên đó. tmux ls hiển thị những session hiện có.
Nếu bạn attach và thấy một shell prompt thông thường ở vị trí Claude Code trước đó, nghĩa là process đã kết thúc nhưng session vẫn chưa kết thúc. Xem dmesg -T | tail để tìm một dòng như Out of memory: Killed process 4821 (claude); dòng này xác nhận process đã bị kill vì hết bộ nhớ. Kiểm tra phần scrollback của shell phía trên prompt để tìm các thông báo exit khác.
Nếu window quay lại với kích thước sai, bị cắt ở mép hoặc có khoảng trống xung quanh, nghĩa là hai client đang attach với kích thước khác nhau. Theo mặc định, tmux 3.4 đặt kích thước window theo client có hoạt động gần đây nhất (window-size latest), nên laptop của bạn vẫn attach ở độ rộng 200 cột và điện thoại ở 40 cột sẽ lần lượt thay đổi kích thước window. Hãy detach các client khác khi attach bằng: tmux attach -d -t claude.
FAQ
Tôi có thể chạy Claude Code trực tiếp trên điện thoại thay vì chạy trên VPS không?
Terminal CLI không được hỗ trợ trên Android hoặc iOS. Tính đến tháng 10 năm 2026, các nền tảng được hỗ trợ là macOS, Windows, Ubuntu 20.04 trở lên, Debian 10 trở lên và Alpine 3.19 trở lên, với ít nhất 4 GB RAM. Android và iOS không nằm trong danh sách đó. Điện thoại cũng đưa app vào trạng thái ngủ và liên tục thay đổi địa chỉ mạng, nên không phù hợp với một agent chạy lâu. Hãy chạy Claude Code trên server và dùng điện thoại làm màn hình.
Session có tiếp tục nếu tôi đóng app hoặc mất tín hiệu không?
Có. Hai thành phần riêng biệt đảm nhiệm việc này. tmux giữ process chạy trên server, nên process không dừng khi connection kết thúc. mosh duy trì chính connection qua lần thay đổi địa chỉ, nên chuyển từ wifi sang mobile data cũng không khiến bạn phải reconnect. Nếu chỉ dùng SSH mà không có tmux, connection bị ngắt sẽ gửi SIGHUP và Claude Code dừng giữa chừng.
Tại sao mosh kết nối được rồi không hiển thị gì?
Nếu login thành công rồi bị treo với Nothing received from server on UDP port 60001., nghĩa là client không thể truy cập mosh-server trên UDP port đó. Nguyên nhân thường là firewall đang chặn UDP từ 60000 đến 61000. Hãy thêm range này vào ufw, rồi thêm lại trong network firewall của provider, vì đây là một lớp kiểm soát riêng trên hầu hết panel. Nếu mosh báo mosh-server không được tìm thấy, server chưa cài package đó hoặc login PATH của server không có package này: hãy cài bằng sudo apt install mosh hoặc dùng mosh --server=/usr/bin/mosh-server you@server.
Làm cách nào để ngắt Claude Code bằng bàn phím không có phím Esc?
Hãy thêm một hàng phím. Termux cấu hình hàng phím này bằng extra-keys trong ~/.termux/termux.properties. Termius và Blink đều có sẵn một hàng phím mà bạn có thể chỉnh sửa trong settings. Esc ngắt response đang chạy và giữ lại phần công việc đã hoàn thành. Ctrl+C cũng ngắt response, nhưng nếu nhấn hai lần tại prompt đang idle thì Claude Code sẽ thoát. Vì vậy, trước tiên hãy dùng Esc.
Mở SSH ra Internet có đủ an toàn cho việc này không?
Khi đã tắt password authentication, credential duy nhất có thể đăng nhập thành công là key không bao giờ rời khỏi các thiết bị của bạn. Đây là mức rủi ro có thể chấp nhận được đối với một máy có thể rebuild. Hãy cấp cho mỗi thiết bị một key riêng để nếu mất điện thoại, bạn chỉ cần xóa một dòng trong authorized_keys. Nếu không muốn xử lý connection trên public port, hãy đặt máy phía sau WireGuard và để sshd listen trên địa chỉ tunnel.