Cho Claude Code Một Chiếc Mac Riêng: Hướng Dẫn Thực Tế Để Cô Lập Agent
Nếu bạn từng dùng --dangerously-skip-permissions trong Claude Code, bạn đã biết sự đánh đổi: agent ngừng hỏi trước mỗi lệnh Bash hay Edit, và nó nhanh hơn hẳn — cho đến khi nó làm điều gì đó bạn không muốn, trên chính chiếc máy cũng đang chứa phiên trình duyệt, SSH key và file cá nhân của bạn. Hướng dẫn của ykdojo lấy giải pháp hiển nhiên nhưng hiếm khi ai thực sự làm và viết ra từng bước: cho Claude một cỗ máy chẳng có gì để mất.
Ý tưởng này liên hệ với điều chúng tôi từng nói trong bài viết về mệt mỏi human-in-the-loop — cách khắc phục cho sự kiệt sức khi giám sát là dời điểm kiểm tra từ từng hành động riêng lẻ sang một ranh giới bao quanh cả tác vụ. Một chiếc máy riêng chính là ranh giới đó, đẩy đến giới hạn logic của nó: thay vì một git branch hay một sandbox container, đó là cả một cỗ máy mà agent không thể thoát ra khỏi.
Phần cốt lõi: SSH và sudo không cần mật khẩu
Bộ khung của thiết lập này là một chiếc Mac dự phòng đã được xóa sạch, bật SSH (sudo systemsetup -setremotelogin on) và cấu hình sudo không cần mật khẩu qua một entry trong /etc/sudoers.d — được xác minh bằng visudo -cf trước khi tin tưởng nó, vì một lỗi gõ sai ở đó có thể khóa bạn khỏi sudo hoàn toàn. Bạn kết nối từ Mac chính qua SSH dùng key đến hostname cục bộ của máy đích (scutil --get LocalHostName), ổn định hơn nhiều so với địa chỉ IP được DHCP cấp qua mỗi lần khởi động lại.
Hai chi tiết quan trọng hơn vẻ ngoài của chúng:
- Đừng đăng nhập Apple ID trên máy đích. Không iCloud, không dữ liệu đồng bộ, không rò rỉ danh tính từ máy chính của bạn.
- Dùng một tài khoản GitHub riêng cho
gh auth loginvà đăng nhập Claude trên máy đích, không phải tài khoản chính — để một hành động agent chạy lố không thể chạm vào repo thật hay quyền tổ chức của bạn.
Từ đó, cài Claude Code chỉ là một dòng lệnh SSH, và một lệnh pmset giữ máy đích không ngủ để luôn sẵn sàng khi cần.
Computer use: phần thực sự cần một giải pháp lách
Chỉ riêng quyền truy cập shell đã bao phủ được nhiều việc, nhưng đóng góp thú vị hơn của hướng dẫn này là làm cho computer use — chụp màn hình cộng điều khiển chuột/bàn phím — hoạt động được qua SSH. macOS gắn quyền Screen Recording và Accessibility với phiên GUI, và một tiến trình SSH không thuộc về phiên đó. Giải pháp là một LaunchAgent giữ cho một server tmux sống bên trong phiên đăng nhập GUI thực sự; các phiên Claude qua SSH sẽ gắn vào server tmux đó và thừa hưởng quyền truy cập màn hình của nó.
Hai trong số các quyền cấp phép không thể script hóa được — macOS yêu cầu click trực tiếp tại máy cho Screen Recording và Accessibility — nên hãy dành khoảng năm phút ở máy đích lần đầu thiết lập. Sau đó, mọi thứ (ic cho phiên mới, ic vnc cho Screen Sharing, ic rc cho Remote Control từ điện thoại) đều chạy được từ Mac chính hoặc điện thoại của bạn.
Một điểm gồ ghề đáng biết trước khi gặp phải: Terminal.app không nhận được chuỗi thoát clipboard OSC52 mà Claude phát ra, nên việc bôi đen và copy một đoạn từ phiên từ xa thường không đến được clipboard cục bộ của bạn. Cmd-A rồi Cmd-C để lấy toàn bộ màn hình hiển thị là giải pháp được ghi trong hướng dẫn — không thanh lịch, nhưng là thói quen năm giây một khi bạn biết cần nó.
Truy cập từ bất cứ đâu
Để truy cập ngoài mạng nhà, hướng dẫn dùng Tailscale để dựng một đường hầm WireGuard peer-to-peer giữa điện thoại/laptop của bạn và chiếc Mac đích — không cần port forwarding, không phơi IP công khai. Với MagicDNS bật, bạn có thể bỏ hậu tố .local và truy cập máy bằng hostname trần từ bất cứ đâu Tailscale đang chạy. Đáng bật tính năng phê duyệt thiết bị trong bảng quản trị Tailscale và tắt hết hạn key trên máy đích, để nó không âm thầm rớt khỏi mạng sau chu kỳ xoay key khoảng ~180 ngày.
Thiết lập này thực sự tốn những gì
| Lớp | Yêu cầu |
|---|---|
| SSH + điều khiển shell | Miễn phí — chỉ cần chiếc Mac dự phòng |
| Computer use (chụp màn hình, chuột/bàn phím) | Gói Claude Pro hoặc Max |
| Claude in Chrome (tự động hóa trình duyệt) | Gói trực tiếp từ Anthropic: Pro, Max, Team hoặc Enterprise |
| Truy cập từ xa từ mọi mạng | Tailscale, gói miễn phí đủ dùng cá nhân |
Dừng ở đâu là hợp lý
Không phải bước nào trong hướng dẫn cũng đáng làm ngay ngày đầu. Nếu bạn chỉ cần một nơi an toàn để chạy các phiên --dangerously-skip-permissions không cần giám sát, riêng phần thiết lập SSH và sudo không mật khẩu đã đủ — đó chính là toàn bộ ranh giới rủi ro. Computer use, Screen Sharing và tự động hóa Chrome là các lớp bổ sung cho khi agent cần điều khiển một ứng dụng GUI, chứ không phải điều kiện tiên quyết cho lợi ích cốt lõi. Thêm chúng khi có tác vụ cụ thể cần, đừng thêm chỉ vì hướng dẫn liệt kê chúng.
Đánh đổi đáng suy nghĩ nhất: sudo không mật khẩu cộng --dangerously-skip-permissions là một mức quyền hạn thực sự cao, và nó chỉ hợp lý bởi vì cỗ máy đó chẳng có gì đáng bảo vệ. Ràng buộc đó chính là toàn bộ mô hình an toàn — nếu bạn từng đặt dữ liệu cá nhân hay thông tin đăng nhập production lên máy đích “chỉ lần này thôi”, bạn đã âm thầm dựng lại đúng rủi ro mà thiết lập này tồn tại để tránh.
Nguồn: “Setting up your spare Mac for Claude Code to control” của ykdojo, thảo luận trên Hacker News.