curlCả 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.
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ập nhật repo và package
pkg update && pkg upgrade
pkg install openssh curl
# đặ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.
whoami # ví dụ: u0_a234
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.
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
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.
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 |
| Cần root? | Không |
| Android cần gì? | Termux + openssh (sshd) + curl + app Tailscale, cùng tailnet |
| Port SSH | 8022 (không phải 22) |
| 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.