SSH vào Pi qua Cloudflare Tunnel và Access

Tóm tắt

Không phải ingest từ tài liệu có sẵn — đây là ghi chú thao tác trực tiếp: dựng SSH-over-Cloudflare-Tunnel vào Raspberry Pi theo đúng mô hình đã dùng cho cf:vtech:tam (một máy homelab khác, xem ~/.ssh/config). Mục tiêu: SSH vào Pi qua domain homelab.nguyenbinhson.com mà không cần mở cổng SSH ra WAN, có lớp xác thực Cloudflare Access (email OTP) đứng trước.

Điểm chính

  • Cài cloudflared (bản arm64, deb) trực tiếp trên Pi — trước đó Pi không còn cloudflared ở tầng hệ điều hành sau khi cài lại OS (chỉ còn container riêng cho WordPress).
  • cloudflared tunnel login cần thao tác thủ công: mở URL, chọn domain nguyenbinhson.com, authorize trên trình duyệt — bước này không thể tự động hoá qua SSH.
  • Tạo tunnel mới tên homelab-ssh (ID bdcd1edd-f39b-47ad-b14e-0e4a55bcbf97).
  • Config đặt tại /etc/cloudflared/ (không phải ~/.cloudflared/) vì cloudflared service install chạy dưới root — cùng lý do đã ghi trong vibe-companion-va-cloudflare-tunnel-tren-raspberry-pi.
  • Ingress rule dùng service: ssh://localhost:22 (khác với Companion dùng http://localhost:3456) — cloudflared proxy nguyên giao thức SSH qua tunnel.
  • DNS: cloudflared tunnel route dns homelab-ssh homelab.nguyenbinhson.com tự tạo CNAME trỏ về <tunnel-id>.cfargotunnel.com.
  • Cài làm systemd service (cloudflared.service), chạy ổn định.
  • Cloudflare Access Application tạo thủ công trên Zero Trust Dashboard: type Self-hosted, domain homelab.nguyenbinhson.com, policy “Only me” (Allow theo email cá nhân) — giống hệt policy đã dùng cho Companion.
  • Client-side: thêm alias cf:home:pi vào ~/.ssh/config, dùng ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h — cùng mẫu với cf:vtech:tam.
  • Lần kết nối đầu tiên: cloudflared access ssh tự mở trình duyệt để xác thực OTP qua Access; sau khi qua Access, SSH vẫn yêu cầu xác thực SSH bình thường (key/password) — Access chỉ là lớp network-level phía trước, không thay thế xác thực SSH.
  • Đã test thành công: ssh cf:home:pi vào được Pi (hostname, whoami trả về đúng).

Khái niệm

Người liên quan

Câu hỏi mở

  • Tunnel homelab-ssh là tunnel riêng cho SSH, tách biệt với tunnel WordPress đang chạy trong Docker — có nên gộp chung một tunnel với nhiều ingress rule (SSH + HTTP) để dễ quản lý hơn không?