Truy cập agent Hermes từ điện thoại qua VPS
Truy cập Hermes trên VPS bằng Tailscale, HTTPS hoặc SSH từ điện thoại. Bài viết chỉ rõ khác biệt bảo mật và cách revoke quyền khi làm mất điện thoại.
Ba cách truy cập agent Hermes từ điện thoại
Để truy cập agent Hermes từ điện thoại, bạn dùng web dashboard của agent. Quyết định thực sự là thành phần nào nằm phía trước dashboard đó. Cách thứ nhất là dùng private mesh network. Dashboard chỉ lắng nghe trên địa chỉ Tailscale và không có cổng nào public ra Internet. Cách thứ hai là dùng public endpoint phía sau reverse proxy có TLS (transport layer security) và bước đăng nhập. Khi đó, bước đăng nhập là lớp duy nhất bảo vệ terminal truy cập vào server của bạn. Cách thứ ba là dùng SSH (secure shell) từ terminal app. Cách này cần ít thiết lập nhất nhưng cấp quyền truy cập nhiều nhất.
Hướng dẫn này bắt đầu từ phần chạy agent Hermes trên VPS của bạn. Agent đã được cài đặt, phản hồi trên command line, và giờ bạn muốn truy cập agent từ điện thoại.
Các lệnh bên dưới dùng tag v2026.8.3, được phát hành vào ngày 3 August 2026 và được ghi là v0.20.0 trong release notes. Hermes phát hành thường xuyên, vì vậy hãy pin máy vào một tag thay vì theo dõi main. Installer chấp nhận một commit:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --commit 3c27eb6234bf
hermes --versionhermes --version hiển thị chính xác phiên bản đã được cài đặt. Hãy so sánh phiên bản đó với tag trước khi tin cậy bất kỳ flag nào trên trang này.
Kho mã phát hành những gì và không phát hành những gì
Kho mã Hermes không có ứng dụng iOS hoặc Android. Client native là hermes desktop (bí danh hermes gui), một ứng dụng Electron cho macOS, Windows và Linux. Ứng dụng này có thể kết nối đến agent từ xa thay vì agent cục bộ: đặt remote URL thành http://<server-address>:9119 trong Settings, mục Gateway, hoặc export HERMES_DESKTOP_REMOTE_URL=http://<server-address>:9119 trước khi khởi chạy. Cách này giải quyết nhu cầu dùng laptop thứ hai. Nó không hỗ trợ điện thoại.
Giao diện bạn dùng trên điện thoại là hermes dashboard, tức giao diện trên trình duyệt. Giao diện này quản lý cấu hình, session, cron job, skill, log và các nền tảng nhắn tin. Nó cũng tích hợp terminal: server khởi chạy hermes --tui phía sau một PTY (pseudo-terminal), rồi stream output vào trang web. Trên màn hình hẹp, bộ chuyển session thu gọn thành một panel trượt vào, nên layout vẫn hiển thị được trên điện thoại.
Theo mặc định, dashboard listen trên 127.0.0.1:9119 và mở một tab trình duyệt ngay trên server. Cách này không hữu ích trên VPS (virtual private server) headless. Hãy khởi động dashboard mà không mở trình duyệt, rồi kiểm tra socket:
hermes dashboard --no-open
ss -lntp | grep 9119Listener trên 127.0.0.1:9119 chỉ có thể truy cập từ server. Listener trên 0.0.0.0:9119 có thể truy cập từ mọi network mà máy được kết nối, bao gồm cả network public. Chỉ một dòng đó quyết định mức độ exposed của bạn, vì vậy hãy đọc nó thay vì tự suy đoán.
Tùy chọn 1: mesh riêng với Tailscale
Chọn tùy chọn này trừ khi bạn có lý do không dùng. Tailscale là một mesh VPN (virtual private network) xây dựng trên WireGuard. Mỗi thiết bị bạn đăng ký sẽ nhận một địa chỉ ổn định và kết nối trực tiếp với các thiết bị khác. Điện thoại của bạn tham gia cùng mesh, nên dashboard hoàn toàn không cần cổng public.
Trên server:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4Cài ứng dụng Tailscale trên điện thoại và đăng nhập bằng cùng tài khoản. tailscale status trên server sẽ liệt kê điện thoại theo tên. Sau đó bind dashboard vào địa chỉ mà tailscale ip -4 đã in ra:
hermes dashboard --host 100.101.102.103 --port 9119 --no-openBind vào địa chỉ mesh thay vì 0.0.0.0 nghĩa là listening socket chỉ tồn tại trên interface Tailscale. Port scan vào public IP của bạn sẽ không tìm thấy gì trên 9119 vì không có tiến trình nào listening ở đó. Firewall vì thế không còn là lớp bảo vệ duy nhất. Xác nhận lại bằng ss -lntp | grep 9119.
Địa chỉ bind cũng quyết định cơ chế xác thực. Đây là phần nhiều người bỏ sót. Trên 127.0.0.1, khi chưa cấu hình public URL, dashboard không có login. Với mọi địa chỉ khác, auth gate là bắt buộc. Nếu chưa cấu hình provider, server sẽ từ chối khởi động. Project gọi cơ chế này là fail closed. Chạy ứng dụng ở chế độ tương tác lần đầu. Ứng dụng sẽ yêu cầu bạn thiết lập username và password ngay lúc đó, rồi lưu chúng dưới dạng dashboard.basic_auth trong ~/.hermes/config.yaml. Bạn cũng có thể cấu hình provider tương tự qua ~/.hermes/.env. Đây là cách được dùng trong ví dụ hoạt động chính thức của project:
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=you
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD_HASH=scrypt$16384$8$1$...
HERMES_DASHBOARD_BASIC_AUTH_SECRET=a-long-random-stringTạo secret đó bằng openssl rand -hex 32 rồi giữ nguyên. Secret dùng để ký session cookie, nên thay đổi nó sẽ đăng xuất mọi thiết bị. File này cũng chứa các model API key của bạn, vì vậy hãy bảo vệ file bằng chmod 600 ~/.hermes/.env.
Kiểm tra auth gate từ một máy khác trong mesh trước khi tin cậy cấu hình:
curl -s http://100.101.102.103:9119/api/status | jq '.auth_required, .auth_providers'true theo sau bởi ["basic"] nghĩa là auth gate đã bật và password provider đang xử lý yêu cầu. Tài liệu chính thức của project nói rõ về provider này: nó dành cho mạng tin cậy hoặc VPN, không phù hợp với dashboard public trên Internet. Với mesh, đó chính xác là trường hợp của bạn.
Để dùng HTTPS trong tailnet, giao cổng cho Tailscale:
sudo tailscale serve --bg localhost:9119
sudo tailscale serve statusTailscale thực hiện TLS termination bằng chứng chỉ được cấp cho tên MagicDNS của máy. Nhờ đó trình duyệt không còn cảnh báo và session cookie nhận được flag Secure. Trước tiên hãy bật MagicDNS và HTTPS Certificates trên trang DNS trong Tailscale admin console. Đồng thời đọc phần xác nhận ở đó: tên máy và tên DNS của tailnet sẽ được công bố trong public certificate transparency ledger, nơi bất kỳ ai cũng có thể đọc.
Chi phí thực tế ở đây là coordination server. Network traffic giữa điện thoại và VPS của bạn được mã hóa end to end và không đi qua Tailscale. Tuy nhiên, tài khoản quyết định thiết bị nào thuộc mesh không nằm trên phần cứng của bạn. Nếu điều đó quan trọng, hãy tự chạy control plane bằng Headscale, control server Tailscale tự host, rồi trỏ các client đến đó bằng tailscale up --login-server https://headscale.example.com. Nếu muốn bỏ mesh và tự cấu hình các peer, phần so sánh giữa WireGuard thuần và Tailscale trình bày những gì bạn phải đánh đổi.
Tùy chọn 2: endpoint HTTPS public và bẫy bên trong
Đôi khi không thể dùng mesh. Điện thoại công việc có thể không cho bạn cài VPN client. Khi đó, hãy đặt dashboard phía sau reverse proxy. Giữ dashboard trên loopback và để Caddy quản lý certificate:
hermes.example.com {
reverse_proxy 127.0.0.1:9119
}Caddy tự lấy và gia hạn certificate. reverse_proxy của Caddy chuyển tiếp WebSocket upgrade mà không cần thêm directive nào. Đây là yêu cầu của terminal được tích hợp trong dashboard. Với nginx, bạn phải tự thêm các header Upgrade và Connection. Cấp certificate Let's Encrypt bằng Certbot trên nginx trình bày phần TLS của quy trình này. Khai báo public name với Hermes để các callback đăng nhập trỏ đến đúng host:
dashboard:
public_url: "https://hermes.example.com"Bây giờ là bẫy. Auth gate dựa vào bind address, không dựa vào địa chỉ gửi request. Các bản phát hành hiện tại cũng bật auth gate khi dashboard.public_url (hoặc HERMES_DASHBOARD_PUBLIC_URL) chỉ đến một host không phải loopback, ngay cả khi backend bind trên loopback. Vì vậy, cấu hình trên sẽ bật auth gate và dashboard từ chối khởi động cho đến khi bạn cấu hình provider. Để public_url không được thiết lập. Khi dashboard bind vào 127.0.0.1 phía sau proxy, nó sẽ thấy loopback, xác định rằng không cần đăng nhập, rồi phục vụ bất kỳ ai mà proxy cho phép đi qua. Dù bạn đã cấu hình thế nào, hãy kiểm tra chính xác những gì đang được public:
curl -s https://hermes.example.com/api/status | jq '.auth_required'Nếu lệnh đó in ra false, Internet chỉ còn cách một URL là truy cập được terminal trên server của bạn. Không cần exploit và log cũng không báo lỗi. Có 2 cách khắc phục, và bạn nên áp dụng ít nhất 1 cách. Hoặc đặt authentication tại proxy, dùng Authentik làm nhà cung cấp single sign-on tự host ở phía trước thông qua forward auth; hoặc cấu hình OIDC (OpenID Connect) provider riêng của dashboard:
HERMES_DASHBOARD_OIDC_ISSUER=https://auth.example.com/application/o/hermes/
HERMES_DASHBOARD_OIDC_CLIENT_ID=hermes-dashboard
HERMES_DASHBOARD_OIDC_SCOPES="openid profile email"Ngay cả khi cấu hình đúng, tùy chọn này vẫn có một giới hạn không thể giảm thêm. Trang đăng nhập public là trang mà bất kỳ ai cũng có thể truy cập và tấn công. Phía sau trang đó là shell trên VPS của bạn. Username và password là lớp bảo vệ mỏng đối với một bề mặt như vậy. Vì thế tài liệu khuyến nghị OAuth hoặc OIDC khi bind public. Hãy rate limit endpoint đăng nhập, giữ ufw đóng với mọi thứ ngoại trừ các cổng proxy và SSH, rồi thỉnh thoảng đọc access log.
Tùy chọn 3: SSH và mosh từ terminal trên điện thoại
Đây là cách ít tốn công nhất: cài ứng dụng terminal trên điện thoại, nạp SSH key vào đó và dùng giao diện văn bản của agent.
ssh you@vps.example.com
tmux new -A -s phone
hermes --tuitmux new -A -s phone kết nối vào session có tên phone, hoặc tạo session đó nếu chưa có. Vì vậy agent vẫn tiếp tục chạy khi kết nối bị ngắt, và lần sau bạn sẽ quay lại đúng vị trí trước đó. Mẫu này cũng giống cách dùng điều khiển Claude Code từ điện thoại.
SSH thuần qua mạng di động khá bất tiện vì kết nối bị ngắt mỗi khi điện thoại đổi địa chỉ hoặc chuyển sang chế độ ngủ. Mosh giải quyết vấn đề này. Mosh chạy trên UDP (user datagram protocol) và đồng bộ trạng thái terminal thay vì một byte stream, nên session vẫn tồn tại khi bạn di chuyển từ wifi sang mạng di động:
sudo apt install -y mosh
sudo ufw allow 60000:61000/udpTrên điện thoại, chạy mosh you@vps.example.com. Mosh khởi động mosh-server qua SSH login hiện có, sau đó chuyển session sang một UDP port trong khoảng từ 60000 đến 61000. Vì vậy, bạn cần mở dải port này. Mỗi session chỉ cần một port riêng. Do đó, trên server có ít session chạy đồng thời, bạn có thể mở dải nhỏ hơn, chẳng hạn từ 60000 đến 60010.
Chi phí bảo mật là điều hiển nhiên. Một SSH session là một shell, và shell có toàn bộ quyền mà account đó có thể sử dụng. Khi đó, các prompt phê duyệt của agent là lớp bảo vệ cuối cùng giữa một chiếc điện thoại bị đánh cắp nhưng đã mở khóa và các file của bạn. Hãy dùng một account non-root riêng cho việc này, chỉ dùng key, và thực hiện hardening SSH trên VPS trước khi đưa key lên một thiết bị bạn thường xuyên mang theo.
Điều gì bị hỏng trên mạng di động
Có bốn vấn đề, và không vấn đề nào có thể xử lý chỉ bằng cấu hình.
Dashboard tự đăng xuất khi bạn không để ý. Thời điểm xảy ra phụ thuộc vào login provider. Provider dùng username và password cấp một access token có thời hạn mặc định là 12 giờ, được thiết lập bằng session_ttl_seconds trong dashboard.basic_auth. Tuy nhiên, giá trị đó chỉ kiểm soát tần suất dashboard refresh ở background, không kiểm soát thời gian bạn vẫn còn đăng nhập. Mỗi lần refresh sẽ tạo một refresh token mới có thời hạn 30 ngày, nên phiên đăng nhập bằng password kéo dài cho đến khi 30 ngày trôi qua mà không có lần refresh nào. Backend restart cũng kết thúc phiên nếu HERMES_DASHBOARD_BASIC_AUTH_SECRET chưa được thiết lập, vì khi đó Hermes tạo một signing key mới mỗi lần khởi động. OAuth provider của Nous Portal cấp access token có TTL (time to live) là 15 phút và renew token ở background bằng một refresh token được rotate sau mỗi lần sử dụng. Vì vậy, chỉ riêng việc access token hết hạn sẽ không đưa bạn quay lại /login. Điều khiến bạn phải đăng nhập lại là refresh session bị mất. Trong các release trước v0.21.3 (tag v2026.9.14, phát hành ngày 14 September 2026), khi điện thoại quay lại từ background, nó có thể gửi nhiều request cùng lúc, replay refresh token vừa được rotate, kích hoạt cơ chế phát hiện reuse của provider và khiến toàn bộ session bị revoke. Khi quay lại, bạn sẽ thấy màn hình login và phần đang nhập bị mất. v0.21.3 khiến các request đó dùng chung một lần refresh. Ở phía Nous Portal, refresh session hiện cũng gia hạn cửa sổ 30 ngày mỗi lần rotate, nhưng 30 ngày không hoạt động vẫn sẽ kết thúc session. Nếu bạn vẫn dùng pin v2026.8.3 ở đầu trang này, hãy dự kiến thỉnh thoảng sẽ bị buộc đăng nhập lại. Không có gì bị hỏng. Hãy đăng nhập lại.
Embedded terminal không tồn tại sau khi tab chuyển sang background. Server tạo TUI (text user interface) phía sau một PTY rồi dọn dẹp tiến trình đó khi tab đóng. Khi mở lại, server tạo một TUI mới. Trình duyệt trên mobile loại bỏ các tab background để thu hồi bộ nhớ, nên chuyển sang ứng dụng khác đủ lâu sẽ kết thúc terminal đó. Lịch sử chat của bạn vẫn an toàn vì session được lưu trên server và hermes sessions list vẫn hiển thị chúng. Bản thân terminal không thể được reattach. Nếu cần một session tồn tại lâu hơn, hãy dùng tmux qua SSH.
Kết nối idle âm thầm bị ngắt. Nhà mạng di động ngắt các kết nối TCP idle để thu hồi entry trong bảng NAT (network address translation). Điện thoại cũng gần như ngừng xử lý network khi màn hình tắt. WebSocket không có traffic trong một thời gian thường đã chết khi bạn mở khóa điện thoại, và trang chỉ reconnect sau khi bạn chạm vào màn hình. Đây là lý do mosh cho cảm giác tốt hơn SSH trên điện thoại: mosh không phụ thuộc vào một kết nối cố định có thể bị mất.
Không có notification nào được push. Dashboard và session SSH đều không thể đánh thức điện thoại. Trên thiết bị không có Hermes app, nên không có đường đi đến push service của nền tảng. Một agent chạy lâu có thể hoàn tất, nhưng bạn chỉ biết khi kiểm tra lại.
Thông báo được gửi qua messaging gateway
Cách xử lý vấn đề cuối cùng là dùng gateway. Đây là một cách hoàn toàn khác để kết nối với agent. hermes gateway kết nối agent với các nền tảng nhắn tin như Telegram, Discord, Slack, WhatsApp, Signal và email. Sau đó, bạn trao đổi với agent trong một ứng dụng đã có sẵn push channel trên điện thoại, tự xử lý việc gửi nền trong background và tiếp tục hoạt động khi mạng bị ngắt.
hermes gateway setup
hermes gateway install
hermes gateway statushermes gateway install đăng ký gateway dưới dạng systemd service, nên gateway sẽ chạy lại sau khi reboot. Giai đoạn cài đặt gateway của installer có thể thực hiện bước này cho bạn. Tuy nhiên, installer không tạo unit nào cho hermes dashboard, nên dashboard sẽ không tự chạy lại sau khi restart. Hãy viết unit cho các thành phần mà bạn phụ thuộc vào. Viết systemd service và timer trên VPS hướng dẫn về chính file đó.
Scheduled job cũng có thể gửi kết quả theo cách tương tự mà không cần cuộc hội thoại:
hermes send -t telegram -s "Backup report" -f /home/you/report.txtCơ chế cấp quyền ở đây mặc định là từ chối. Khi chưa đặt allowlist và GATEWAY_ALLOW_ALL_USERS chưa được thiết lập, mọi user đều bị từ chối. Đây là trạng thái khởi đầu phù hợp. Hãy khai báo các account được phép trong ~/.hermes/.env:
TELEGRAM_ALLOWED_USERS=123456789
GATEWAY_ALLOWED_USERS=123456789Hoặc dùng pairing bằng code thay vì dán numeric ID. Đây là cơ chế mặc định cho các nền tảng DM kiểu chat. Bạn cũng có thể đặt rõ cơ chế này bằng unauthorized_dm_behavior: pair trong ~/.hermes/config.yaml. Khi một account chưa được nhận diện nhắn tin cho agent, account đó sẽ nhận được một code gồm 8 ký tự. Không có hành động nào khác xảy ra cho đến khi bạn phê duyệt code đó:
hermes pairing list
hermes pairing approve telegram ABC12DEF
hermes pairing revoke telegram 123456789Code hết hạn sau 1 giờ. Mỗi user chỉ có thể yêu cầu một code sau mỗi 10 phút. 5 lần thử thất bại sẽ khóa account đó.
Giới hạn phạm vi ảnh hưởng khi điện thoại bị đánh cắp
Điện thoại có thể kết nối đến agent cũng có thể chạy lệnh trên server của bạn, và điện thoại có thể bị thất lạc. Hãy quyết định ngay người đang cầm điện thoại đó được phép làm gì.
Hãy giữ cơ chế phê duyệt luôn bật. approvals.mode mặc định là smart, trong đó một model phụ sẽ đánh giá rủi ro và chỉ tự động phê duyệt các lệnh có rủi ro thấp. Đặt thành off tương đương với chạy mọi thứ bằng --yolo, còn HERMES_YOLO_MODE=1 thực hiện việc đó thông qua environment. Không mang theo điện thoại đang kết nối đến agent ở trạng thái đó. Đặt approvals.cron_mode: deny để các scheduled job không thể tự phê duyệt khi bạn đang ngủ.
approvals:
mode: smart
cron_mode: denyHãy giới hạn phạm vi mà agent có thể tác động. terminal.backend: docker chạy các lệnh bên trong một container, loại bỏ toàn bộ Linux capability trừ một danh sách ngắn, đặt no-new-privileges và giới hạn số lượng process. Nhờ đó, container trở thành ranh giới bảo vệ thay vì dựa vào prompt. terminal.cwd cố định working directory. HERMES_WRITE_SAFE_ROOT giới hạn write_file và patch vào các thư mục bạn chỉ định. Mọi thao tác ghi bên ngoài các thư mục đó đều bị chặn và không có cơ chế phê duyệt nào có thể ghi đè.
export HERMES_WRITE_SAFE_ROOT=/home/you/projects:/home/you/.hermesHermes đã chặn thao tác ghi vào ~/.ssh, ~/.aws, ~/.kube và /etc/sudoers, cũng như các secret store của chính nó, chẳng hạn ~/.hermes/.env. Các file .env của project ở những vị trí khác trên disk bị chặn đọc nhưng vẫn có thể ghi. Hermes cũng từ chối một danh sách cố định các lệnh phá hoại, bất kể cấu hình phê duyệt của bạn là gì. Hãy xem đó là mức bảo vệ tối thiểu, không phải kế hoạch bảo mật của bạn. Hãy chạy agent bằng user thông thường, tuyệt đối không chạy bằng root. Cách suy luận này cũng áp dụng cho mọi coding agent chạy unattended. Chạy Claude Code an toàn trên VPS trình bày chi tiết hơn về cách này.
Sau đó, hãy ghi lại các bước thu hồi quyền trước khi cần dùng đến. Xóa thiết bị trong Tailscale admin console sẽ cắt quyền truy cập mesh ngay lập tức. Thay đổi HERMES_DASHBOARD_BASIC_AUTH_SECRET rồi restart sẽ vô hiệu hóa mọi dashboard session trên tất cả thiết bị, vì giá trị đó được dùng để ký session cookie. Xóa public key của điện thoại khỏi ~/.ssh/authorized_keys sẽ chấm dứt SSH. hermes pairing revoke telegram <user-id> sẽ xóa một messaging account. Nếu thiết bị từng lưu bất kỳ thứ gì có thể đọc provider key của bạn, hãy thu hồi chúng bằng hermes auth logout <provider> và cấp key mới ở upstream.
Hãy kiểm tra kết quả thay vì giả định rằng mọi thứ đã được xử lý. Đây là các lệnh chạy trên chính server của bạn. Nội dung in ra phụ thuộc vào cấu hình của bạn:
tailscale status
hermes pairing list
hermes logs gateway -n 100
hermes status --deepLog nằm trong ~/.hermes/logs/. Hãy đọc chúng sau mỗi incident, và thỉnh thoảng đọc cả khi chưa xảy ra incident nào.
FAQ
Có ứng dụng Hermes chính thức cho iOS hoặc Android không?
Không. Repository Hermes cung cấp CLI, dashboard web và ứng dụng desktop Electron cho macOS, Windows và Linux. Hermes không có bản build chính chủ cho iOS hoặc Android. Trên điện thoại, bạn dùng dashboard web trong trình duyệt, SSH client hoặc một nền tảng nhắn tin được kết nối qua hermes gateway. Có các mobile client của bên thứ ba, nhưng đó là code bên thứ ba có thể lưu credential truy cập agent của bạn, vì vậy hãy đọc source trước khi cài đặt.
Vì sao dashboard Hermes đăng xuất tôi trên điện thoại?
Điều này phụ thuộc vào login provider. OAuth provider của Nous Portal cấp access token có TTL 15 phút và tự gia hạn trong background bằng refresh token luân phiên. Vì vậy, chỉ riêng access token hết hạn không đưa bạn đến /login. Trong các release trước v0.21.3 (tag v2026.9.14), điện thoại quay lại từ background có thể gửi nhiều request cùng lúc, gửi lại refresh token vừa được xoay vòng và khiến toàn bộ session bị thu hồi. Khi đó bạn phải đăng nhập lại. v0.21.3 đã sửa lỗi này, nhưng refresh session không hoạt động trong 30 ngày vẫn hết hạn. Username và password provider mặc định cấp access token 12 giờ, được thiết lập bằng session_ttl_seconds. Giá trị này chỉ kiểm soát tần suất dashboard refresh trong background. Provider này gia hạn thông qua refresh token 30 ngày và cấp lại token sau mỗi lần refresh, nên phiên đăng nhập bằng password không kết thúc sau 12 giờ. Với provider này, hãy đặt HERMES_DASHBOARD_BASIC_AUTH_SECRET thành một giá trị ngẫu nhiên ổn định. Nếu không đặt, Hermes tạo signing key mới mỗi lần khởi động, khiến bạn bị đăng xuất sau mỗi lần restart.
Tôi có thể đưa dashboard Hermes lên public Internet một cách an toàn không?
Chỉ khi bạn đã tự xác minh authentication. Auth gate được bật dựa trên bind address. Trong các release hiện tại, nó cũng được bật khi dashboard.public_url chỉ đến một host không phải loopback. Vì vậy, dashboard bind vào 127.0.0.1 phía sau reverse proxy nhưng không đặt public URL sẽ không yêu cầu người dùng Internet đăng nhập. Hãy chạy curl -s https://your-host/api/status | jq '.auth_required' và đọc kết quả trả về. Dùng OAuth hoặc OIDC thay vì username và password, vì tài liệu của project cho biết password provider chỉ dành cho trusted network và VPN. Private mesh loại bỏ hoàn toàn vấn đề này, nên đây là lựa chọn mặc định tốt hơn.
Tôi có cần tài khoản Tailscale không, hay có thể tự host control plane?
Bạn có thể tự host control plane. Headscale là một implementation mở của Tailscale coordination server. Các Tailscale client chính thức kết nối với nó bằng tailscale up --login-server https://headscale.example.com. Khi đó, bạn tự quản lý danh sách thiết bị được phép tham gia mesh. Đổi lại, bạn phải vận hành và backup server đó. Trong thời gian server ngừng hoạt động, bạn không thể enrol hoặc re-authenticate thiết bị.
Làm cách nào để nhận thông báo trên điện thoại khi agent hoàn tất một job?
Hãy dùng messaging gateway. Dashboard và SSH không có cách đánh thức điện thoại, vì trên thiết bị không có Hermes app để nhận push notification. Kết nối agent với Telegram, Signal, Discord hoặc một nền tảng được hỗ trợ khác bằng hermes gateway setup, rồi để app của nền tảng đó gửi thông báo. Bạn cũng có thể dùng cron job để gửi một message đơn bằng hermes send -t telegram -s "Job done" -f /path/to/report.txt. Cách này gửi message mà không gọi model.