← guides / SSH vào Android qua Tailscale + chạy curl (không cần root) ⚡ Hướng dẫn thực hành SSH từ Mac mini vào Android qua Tailscale & chạy curl Cả hai máy join cùng một tailnet. Mục tiêu: SSH từ Mac mini vào điện thoại Android rồi chạy lệnh — không cần root . ❓ Có cần root không? → KHÔNG. Android không có sẵn SSH server, và Tailscale cũng không biến Android thành SSH server được (Tailscale SSH server chỉ chạy trên Linux). Giải pháp: cài Termux — chạy hoàn toàn trong userspace, không đụng tới root. Root chỉ cần nếu bạn muốn dùng port 22 mặc định (xem mục 5). 🖥️ Mac mini ssh client → 🔒 Tailnet 100.x.x.x → 📱 Android Termux sshd :8022 1 Setup phía Android (Termux) ⚠️ Cài Termux từ F-Droid hoặc GitHub — KHÔNG dùng bản trên Google Play (đã cũ và lỗi, không cập nhật package được). Cài SSH server + curl # cập nhật repo và package pkg update && pkg upgrade pkg install openssh curl Bật SSH server # đặt mật khẩu (hoặc dùng SSH key — xem mục 3) passwd # khởi động sshd sshd 💡 Vì không root, sshd của Termux nghe ở port 8022 (không phải 22) — user thường không bind được port < 1024. Lấy username Termux (cần khi ssh vào) whoami # ví dụ: u0_a234 Cài & kết nối Tailscale Cài app Tailscale trên Android, đăng nhập cùng tailnet với Mac mini. Lấy IP 100.x.x.x của Android trong app hoặc admin console. 2 Kết nối từ Mac mini ssh -p 8022 u0_a234 @ <tailscale-ip-android> Nếu bật MagicDNS , dùng luôn tên máy thay cho IP: ssh -p 8022 u0_a234@ android-hostname Sau khi vào shell, chạy curl bình thường: curl https://example.com curl -s https://api.ipify.org # xem IP public mà Android đang đi ra 3 Khuyến nghị: dùng SSH key thay mật khẩu Trên Mac mini , lấy public key: cat ~/.ssh/id_ed25519.pub Trên Termux , dán vào file authorized_keys: mkdir -p ~/.ssh nano ~/.ssh/authorized_keys # dán public key vào đây chmod 600 ~/.ssh/authorized_keys ✅ Dùng key giúp bạn ssh không cần gõ mật khẩu mỗi lần, và an toàn hơn — đặc biệt khi muốn chạy script tự động từ Mac mini. 4 Giữ kết nối ổn định Trở ngại lớn nhất không phải SSH mà là Android tự tắt tiến trình nền . Xử lý: Vấn đề Giải pháp Android kill Termux ở background Tắt battery optimization cho Termux; cài pkg install termux-api rồi chạy termux-wakelock để giữ tiến trình sống Tailscale rớt khi tắt màn hình Android Settings → VPN → bật Always-on VPN cho Tailscale; tắt battery optimization cho app Tailscale sshd không tự chạy sau reboot Cài addon Termux:Boot để tự start sshd + Tailscale khi khởi động máy Phải gõ sshd mỗi lần mở Termux Thêm sshd vào ~/.bashrc hoặc dùng Termux:Boot 5 Nếu Android có root: dùng port 22 Root cho phép bind vào privileged port (< 1024), nên bạn có thể dùng port 22 mặc định — không phải gõ -p 8022 mỗi lần. Có 2 cách, đều cần root. 💡 Root là tùy chọn . Cách không-root ở trên (port 8022) đã đủ dùng và ổn định. Chỉ dùng port 22 nếu bạn muốn lệnh ssh gọn hơn, hoặc cần tương thích công cụ chỉ hỗ trợ port 22. Cách A — Redirect 22 → 8022 bằng iptables (khuyến nghị) Giữ nguyên Termux sshd chạy ở 8022 (vẫn chạy bằng user thường), chỉ mượn root để chuyển hướng port. Sạch và an toàn hơn vì sshd không cần chạy với quyền root. # cài tsu để có quyền root trong Termux pkg install tsu # chuyển mọi kết nối tới port 22 sang 8022 (sshd của Termux) sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 8022 Từ Mac mini giờ ssh không cần chỉ định port: ssh u0_a234 @ <tailscale-ip-android> Cách B — Chạy sshd thẳng trên port 22 bằng root # mở config sshd của Termux, đổi cổng nano $PREFIX/etc/ssh/sshd_config # sửa dòng: Port 8022 -> Port 22 # chạy sshd với quyền root để bind được port 22 sudo sshd ⚠️ Khi sshd chạy bằng root, nó vẫn drop quyền về user Termux lúc bạn đăng nhập — nên ~/.ssh/authorized_keys phải thuộc đúng user đó (đừng để root sở hữu). Nếu sai quyền, đăng nhập bằng key sẽ thất bại do StrictModes . Giữ qua reboot Rule iptables và sshd-chạy-root không tự sống lại sau khi khởi động. Dùng Termux:Boot để chạy lại lệnh ở Cách A/B khi boot, hoặc đặt làm Magisk service script (đặt vào /data/adb/service.d/ ) nếu bạn dùng Magisk. 6 Tóm tắt nhanh Cần root? Không bắt buộc — chỉ cần nếu muốn dùng port 22 (mục 5) Android cần gì? Termux + openssh (sshd) + curl + app Tailscale, cùng tailnet Port SSH 8022 (không root) · 22 nếu có root — xem mục 5 Username kết quả của whoami trong Termux (vd u0_a234 ) Trở ngại chính Giữ Termux + Tailscale không bị Android tắt nền 🔎 Ghi chú về IP: Tailscale mặc định KHÔNG tunnel toàn bộ traffic internet. Khi chạy curl trên Android, traffic ra internet vẫn đi qua mạng của điện thoại (Wi-Fi/4G) — trừ khi Android dùng một Exit Node . IP 100.x.x.x chỉ là địa chỉ nội bộ tailnet, không phải IP public. Hướng dẫn thực hành · Tailscale + Termux + SSH · cập nhật 2026-06