⚡ 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.

🖥️ 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 ở backgroundTắ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ìnhAndroid Settings → VPN → bật Always-on VPN cho Tailscale; tắt battery optimization cho app Tailscale
sshd không tự chạy sau rebootCài addon Termux:Boot để tự start sshd + Tailscale khi khởi động máy
Phải gõ sshd mỗi lần mở TermuxThêm sshd vào ~/.bashrc hoặc dùng Termux:Boot

5 Tóm tắt nhanh

Cần root?Không
Android cần gì?Termux + openssh (sshd) + curl + app Tailscale, cùng tailnet
Port SSH8022 (không phải 22)
Usernamekết quả của whoami trong Termux (vd u0_a234)
Trở ngại chínhGiữ 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.