Cài Gemini CLI trên VPS không có giao diện đồ họa
Chạy Gemini CLI trên VPS headless với Node hiện đại, cài npm global không cần sudo, xác thực API key không cần trình duyệt và tmux giữ tác vụ khi SSH ngắt.
Bạn đang xây dựng gì
Một Gemini CLI luôn chạy trên máy chủ của bạn, có thể truy cập qua SSH, thực hiện các tác vụ agent dài hạn mà vẫn tiếp tục chạy sau khi bạn đóng laptop. Việc cài đặt chỉ gồm ba lệnh. Phần tốn công sức là những thứ vốn mặc định dành cho máy tính để bàn: CLI của Google muốn mở trình duyệt để bạn đăng nhập, nhưng máy chủ của bạn thì không có trình duyệt. Vì vậy, phần lớn hướng dẫn này là về cách thiết lập headless, cài đặt phiên bản Node hiện đại mà distro không cung cấp sẵn, cài đặt npm toàn cục không cần quyền root, xác thực không cần trình duyệt bằng API key được lưu tách biệt khỏi lịch sử shell, và dùng tmux để phiên SSH bị ngắt không làm gián đoạn tác vụ đang chạy.
Gemini CLI là một chương trình Node mã nguồn mở (Apache-2.0) (@google/gemini-cli) giao tiếp với các model Gemini của Google, có khả năng đọc/ghi file, chạy lệnh shell và điều khiển các công cụ trong thư mục làm việc. Trên một VPS, nó là một agent nhỏ, luôn sẵn sàng để bạn để nó tự chạy, đó là lý do tại sao tài khoản dùng để chạy nó và các thông tin xác thực lưu trên máy chủ quan trọng hơn bất kỳ thiết lập đơn lẻ nào ở đây.
Điều kiện cần và các điểm cần lưu ý
- Một Ubuntu 24.04 KVM VPS mới với root hoặc sudo. Bất kỳ gói KVM nào cũng được; bản thân CLI khá nhẹ, khi không chạy thường chỉ dùng vài trăm MB RAM.
- Node.js 20 trở lên. Đây là ngưỡng phiên bản bắt buộc duy nhất, còn package của distro thấp hơn phiên bản này; xem phần tiếp theo. Node 20 đã hết vòng đời vào April 30, 2026, vì vậy hãy cài bản 24.
- HTTPS outbound (port 443) đến các API của Google. Không cần port inbound; đây là client, không phải server, nên không cần mở lỗ trên firewall.
- Một cách xác thực không cần browser trên server: dùng paid Gemini API key từ Google AI Studio, hoặc đăng nhập Google; trên máy headless, cách này yêu cầu bạn dán một code trở lại terminal. Cách dùng API key phù hợp hơn với script và các lần chạy unattended.
- Docker hoặc Podman, chỉ cần nếu bạn muốn isolation bằng
--sandbox. Đây là tùy chọn và sẽ được trình bày gần cuối.
Điểm dễ gây nhầm lẫn hiện nay là account, không phải browser. Google thông báo vào May 19, 2026 rằng từ June 18, 2026 Gemini CLI sẽ ngừng xử lý request cho thuê bao Google AI Pro và Ultra, cũng như cho những người đang sử dụng miễn phí. Google hướng các user này sang sản phẩm thay thế là Antigravity CLI (agy). Gemini CLI vẫn hoạt động với paid Gemini API key, Gemini Enterprise Agent Platform API key và license Gemini Code Assist Standard hoặc Enterprise của tổ chức. Hãy chọn cách xác thực trước khi bắt đầu.
Node: gói của distro quá cũ
Ubuntu 24.04 cung cấp Node 18.19.1 trong các repository riêng, đi kèm npm 9.2.0. package.json của Gemini CLI khai báo engines: { node: ">=20" }. Theo mặc định, npm không dừng hẳn khi phát hiện phiên bản không khớp. Nó vẫn cài đặt và in cảnh báo cho biết khoảng chênh lệch:
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@google/gemini-cli@0.50.0',
npm WARN EBADENGINE required: { node: '>=20' },
npm WARN EBADENGINE current: { node: 'v18.19.1', npm: '9.2.0' }
npm WARN EBADENGINE }Nếu bỏ qua cảnh báo đó, CLI sẽ chạy trên runtime không được hỗ trợ. Nó có thể hoạt động sai hoặc crash ngay khi gọi đến một API của Node 20+ mà nó yêu cầu. Node 18 cũng đã hết vòng đời vào tháng 4 năm 2025, nên dù theo cách nào đây cũng là hướng cụt. Hãy cài một bản LTS hiện tại trước khi cài CLI. Có 2 cách phù hợp: NodeSource (một apt repo có chữ ký, áp dụng cho toàn hệ thống) hoặc nvm (version manager theo từng user). Chọn một cách.
NodeSource, nếu bạn muốn mọi user trên máy đều dùng được Node:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
node --versionnode --version phải in ra v20.x hoặc cao hơn để đáp ứng yêu cầu của CLI. Tuy nhiên, Node 20 đã hết vòng đời từ ngày 30 tháng 4 năm 2026, nên hãy chọn v24.x, bản LTS active hiện tại. Node 26 dự kiến trở thành bản LTS active vào ngày 28 tháng 10 năm 2026. Hãy kiểm tra trang NodeSource để lấy setup script hiện tại. setup_24.x trong URL là phần cần tăng lên khi có bản LTS mới hơn.
nvm, nếu bạn muốn giữ Node trong home của một user và không bao giờ dùng sudo để can thiệp vào nó:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install --lts
node --versionv0.40.1 trong URL đó là phiên bản hiện tại tại thời điểm viết tài liệu này. Hãy kiểm tra README của nvm để lấy bản release mới nhất và thay phiên bản trong URL trước khi chạy lệnh. nvm có một ưu điểm thực tế cho trường hợp này: nó cài Node và các global package vào ~/.nvm. Vì vậy, vấn đề permission khi cài global trong phần tiếp theo sẽ không xảy ra. Nếu chọn nvm, bạn có thể bỏ qua bước cấu hình npm-prefix.
Cài đặt CLI mà không cần sudo npm -g
Lệnh dễ gây nhầm lẫn là sudo npm install -g @google/gemini-cli. Đừng chạy nó. Một global prefix thuộc sở hữu của root sẽ gây ra lỗi quyền truy cập cho mọi lần cài đặt sau này và để lại các file thuộc quyền root trong npm cache, gây rắc rối về sau. Chạy một lệnh npm install -g thông thường (không sudo) với Node của hệ thống sẽ dẫn đến lỗi khác:
npm error code EACCES
npm error syscall mkdir
npm error path /usr/lib/node_modules/@google
npm error errno -13
npm error Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/@google'Đó là khi npm cố gắng ghi vào /usr/lib, nơi user của bạn không có quyền. Cách sửa không phải là dùng sudo, mà là trỏ global prefix của npm về thư mục home để các gói cài đặt global nằm ở nơi bạn sở hữu:
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
npm install -g @google/gemini-cli
gemini --version~/.bashrc, không phải ~/.profile, là có chủ đích: tmux, công cụ bạn sẽ dùng để chạy CLI trong hai phần tới, khởi tạo một non-login shell đọc file ~/.bashrc và bỏ qua ~/.profile. Do đó, một dòng PATH đặt sai file sẽ khiến gemini không khả dụng đúng nơi bạn cần. Việc gemini --version in ra số phiên bản là bài kiểm tra hoàn chỉnh. Nếu bạn nhận được gemini: command not found, nghĩa là lệnh export PATH của bạn chưa có hiệu lực, hãy xem các kiểu lỗi. Với nvm, hãy bỏ qua hoàn toàn các dòng thiết lập prefix: nó đã tự cài đặt các gói global vào thư mục home của bạn rồi.
Nếu bạn đã chạy sudo npm trước đó và giờ thấy Your cache folder contains root-owned files, hãy sửa lỗi một lần bằng sudo chown -R $(id -u):$(id -g) ~/.npm.
Vấn đề xác thực trên máy không có giao diện và cách vượt qua
Chạy gemini ở chế độ tương tác lần đầu. CLI sẽ đề nghị đăng nhập bằng tài khoản Google của bạn. Trên máy tính để bàn, CLI mở một tab trình duyệt. Trên headless Linux VPS, CLI kiểm tra display trước. Khi không biến nào trong DISPLAY, WAYLAND_DISPLAY hoặc MIR_SOCKET được set, CLI không cố mở trình duyệt. CLI in ra một sign-in link rồi chờ bạn dán code trở lại:
Please visit the following URL to authorize the application:
https://accounts.google.com/o/oauth2/v2/auth?...
Enter the authorization code:Cách này hoạt động qua SSH thông thường. Tuy nhiên, mỗi lần bạn đều phải dùng trình duyệt. Từ ngày 18 tháng 6 năm 2026, cách này chỉ đăng nhập được nếu tài khoản Google của bạn vẫn thuộc nhóm tài khoản Gemini CLI hỗ trợ.
Có 2 cách thực tế để xử lý.
Cách thứ nhất là dùng API key. Đây là lựa chọn mặc định phù hợp cho server. Tạo key trong Google AI Studio (aistudio.google.com) trên một project đã bật billing, vì Gemini CLI không còn hỗ trợ sử dụng miễn phí. Sau đó truyền key cho CLI bằng environment variable. CLI đọc GEMINI_API_KEY và bỏ qua hoàn toàn quy trình mở trình duyệt. Tiếp theo là cách giữ key không xuất hiện trong history và các file mà mọi người đều đọc được. Không nhập export GEMINI_API_KEY=AIza... trực tiếp tại prompt, vì key sẽ được ghi rõ trong ~/.bash_history. Cũng không đặt key trong file mà người khác có thể đọc. Ghi key vào file mode-600 để shell source file này khi khởi động:
umask 077
printf 'export GEMINI_API_KEY=%s\n' 'AIzaSyYOUR_KEY_HERE' > ~/.gemini_env
chmod 600 ~/.gemini_env
echo '[ -f ~/.gemini_env ] && . ~/.gemini_env' >> ~/.bashrc
source ~/.bashrcchmod 600 nghĩa là chỉ user của bạn có thể đọc file. Xác nhận key đã có trong environment bằng printenv GEMINI_API_KEY. Nếu lệnh không in gì, CLI sẽ quay lại auth picker thay vì dùng key. CLI cũng đọc file .env tại ~/.gemini/ nếu bạn muốn dùng cách bố trí đó. Quy tắc vẫn giống nhau, vì vậy chmod 600 ~/.gemini/.env.
Cách thứ hai là đăng nhập trực tiếp bằng Google. Trên máy headless, cách này không cần tunnel và cũng không cần mở port. Từ ngày 18 tháng 6 năm 2026, cách này chủ yếu phù hợp với license Gemini Code Assist Standard hoặc Enterprise của tổ chức; đồng thời set GOOGLE_CLOUD_PROJECT. Tài khoản cá nhân miễn phí và các subscription Google AI Pro hoặc Ultra không còn được hỗ trợ. Khởi động CLI trong một SSH session thông thường rồi chọn Sign in with Google:
geminiCopy URL được in ra vào browser trên laptop rồi approve. Google redirect đến https://codeassist.google.com/authcode, nơi hiển thị authorization code. Dán code đó tại prompt Enter the authorization code: trên VPS để hoàn tất đăng nhập. Server không chờ callback, nên không cần cố định port và không cần thiết lập ssh -L. OAUTH_CALLBACK_PORT chỉ ảnh hưởng đến loopback flow mà CLI dùng khi phát hiện display. Nếu bạn kết nối bằng X11 forwarding (ssh -X), DISPLAY sẽ được set và CLI sẽ dùng loopback flow đó thay thế, với redirect đến http://127.0.0.1:PORT/oauth2callback trên server. Chạy NO_BROWSER=true gemini để buộc CLI dùng flow paste-a-code. Cách này hoạt động, nhưng bạn phải ngồi trước browser nên không phù hợp với script. Với mọi thứ bạn để chạy lâu dài, hãy dùng API key.
Đối với Vertex AI hoặc một Google Cloud project thay vì AI Studio, hãy set GOOGLE_API_KEY cùng với GOOGLE_GENAI_USE_VERTEXAI=true, hoặc GOOGLE_CLOUD_PROJECT cho license Code Assist. Vẫn áp dụng cùng nguyên tắc dùng environment variable và file mode-600.
Chạy trong tmux để phiên SSH bị ngắt không dừng tiến trình
Một tiến trình gemini được khởi chạy trực tiếp từ SSH shell sẽ là tiến trình con của shell đó. Khi mất kết nối, laptop bị đóng, Wi-Fi bị ngắt hoặc phiên bị timeout do không hoạt động, sshd sẽ hủy pseudo-terminal, shell nhận SIGHUP rồi truyền tín hiệu hangup đến CLI. Một tác vụ đã chạy được mười phút để chỉnh sửa file cũng sẽ dừng theo, và khi kết nối lại thì không còn process nào để tiếp tục.
tmux khắc phục việc này bằng cách sở hữu shell thay vì để sshd sở hữu shell. Đây cũng là cách chạy AI coding agent trên một VPS từ xa bên trong tmux, và cơ chế hoạt động ở đây cũng giống hệt:
sudo apt install -y tmux
tmux new -A -s gemini
# inside the session:
gemini
# detach with Ctrl-b then d, the task keeps running
# reconnect later from any machine:
tmux attach -t geminitmux new -A -s gemini sẽ attach vào session có tên gemini nếu session đó tồn tại, hoặc tạo session nếu chưa có. Vì vậy, đây là lệnh nên chạy ngay sau mỗi lần đăng nhập. Shell bên trong thuộc về tmux server đã detached, không thuộc về SSH session của bạn, nên khi kết nối bị ngắt, CLI vẫn tiếp tục chạy. Khi kết nối lại, hãy attach để quay về cùng scrollback. Nếu chạy nhiều agent session trên một máy, hãy dùng một tmux session cho mỗi session agent. Trong trường hợp này, chúng không thể trao đổi với nhau, khác với Claude Code, nơi một session có thể chuyển văn bản cho session khác trên cùng VPS. Vì vậy, hãy để mỗi Gemini job hoạt động độc lập hoặc điều phối chúng qua các file trên disk.
Đối với các lần chạy non-interactive theo script, Gemini CLI có headless mode: gemini -p "summarise the failing tests in this repo" in câu trả lời rồi thoát, còn --output-format json xuất output ở dạng machine-readable để pipe sang nơi khác. Headless mode dùng API key rất phù hợp khi chạy trong tmux session cho một batch job dài hoặc được gọi từ cron entry. Tuy nhiên, cron job không source bất kỳ login file nào. Vì vậy, hãy cấp cho dòng crontab một GEMINI_API_KEY riêng (hoặc để command source ~/.gemini_env), nếu không lần chạy sẽ fail vì thiếu credential.
Sandbox và quyền trên máy chủ đồng thời chạy production
Một agent có quyền shell là một shell. Gemini CLI có thể chạy command. Theo mặc định, nó sẽ hỏi trước mỗi command có rủi ro. Tuy nhiên, nhiều người sử dụng --yolo (tự động approve mọi tool call). Khi đó, agent có thể xóa file, push lên git hoặc truy cập các service nội bộ với toàn bộ quyền của user đang chạy agent. Trên máy chủ cũng chạy production, đây là một blast radius thực tế, không phải giả định.
Ba biện pháp kiểm soát, xếp theo mức độ hiệu quả:
- Chạy agent bằng một user riêng, không có quyền đặc biệt. Không dùng root và không cho user này vào
sudo. Tạo một useragentcó home riêng, cài Node và CLI trong môi trường đó. Nếu agent hiểu sai instruction, tác động sẽ chỉ nằm trong phạm vi của account này. Đây là quyết định có giá trị bảo vệ cao nhất. - Không đặt credential của production trên máy chủ. Không có
~/.aws/credentialscủa prod, không copy.envtừ production xuống, và không dùng database password có quyền ghi vào bất kỳ dữ liệu quan trọng nào. Chỉ cấp credential của staging hoặc credential read-only. - Dùng sandbox tích hợp sẵn. Khi đã cài Docker hoặc Podman,
gemini --sandbox(hoặcGEMINI_SANDBOX=docker) sẽ chạy các tool call của agent trong một container. Container này chỉ mount thư mục project hiện tại, không mount phần còn lại của filesystem trên host. Sandbox không thay thế cho user không có quyền đặc biệt, nhưng là một lớp bảo vệ thứ hai hiệu quả khi cùng một VPS đang chạy workload thực tế.
Nếu bạn chạy Gemini CLI bên cạnh các tool tự host khác, chẳng hạn một MCP server cung cấp tool cho agent trên cùng VPS, hãy xem mỗi capability được thêm vào là một phần surface mới mà agent có thể truy cập. Chỉ cấp cho agent các token có phạm vi đúng bằng một nhiệm vụ duy nhất.
Hạn mức, chi phí và đường dẫn xác thực bạn chọn
Đường dẫn xác thực quyết định cách bạn bị tính phí và, kể từ June 18, 2026, quyết định bạn có được phục vụ hay không. Theo thông báo của Google, kể từ ngày đó Gemini CLI ngừng phục vụ request cho thuê bao Google AI Pro và Ultra, cũng như mọi người dùng miễn phí. Phạm vi này bao gồm free tier của tài khoản cá nhân và các API key không tính phí. Gemini CLI vẫn khả dụng thông qua các API key Gemini trả phí và API key Gemini Enterprise Agent Platform, được tính phí theo token; và dành cho các tổ chức có license Gemini Code Assist Standard hoặc Enterprise, hoặc có quyền truy cập Google Cloud khác, được tính phí qua Google Cloud. Mỗi tier vẫn có giới hạn theo phút và theo ngày. Vượt quá giới hạn, request sẽ trả về lỗi rate limit cho đến khi cửa sổ giới hạn được reset.
Có 2 lưu ý thực tế. Một agent không có người giám sát chạy trong loop có thể nhanh chóng tiêu hết quota, vì vậy hãy monitor nó trong vài lần đầu trước khi giao cho cron job. Nếu bạn cần model chạy phía server vì lý do privacy hoặc inference không tính theo usage, thay vì dùng model được Google host, thì đó là một công cụ khác: tự host một LLM open bằng Ollama trên VPS sẽ giữ weights và prompt trên máy của bạn, đổi lại bạn phải chạy một model nhỏ hơn Gemini nhiều.
Cập nhật phần mềm
Gemini CLI thường xuyên có các bản release mới. Vì bạn đã cài đặt nó vào một prefix thuộc sở hữu của người dùng, việc cập nhật không bao giờ cần dùng đến sudo:
npm install -g @google/gemini-cli@latest
gemini --versionCó các kênh release như sau: @latest là bản ổn định, @preview là bản preview hàng tuần, @nightly là bản thử nghiệm mới nhất, hãy pin vào @latest cho bất kỳ thứ gì bạn cần sự ổn định. Trên nvm, các gói global nằm dưới phiên bản Node đang hoạt động, vì vậy sau khi nvm use để chuyển đổi phiên bản Node, bạn có thể cần cài đặt lại CLI. Hãy đọc ghi chú phát hành thay vì chạy theo mọi bản vá.
Các tình huống lỗi, kèm chuỗi chính xác
npm WARN EBADENGINE Unsupported engine ... required: { node: '>=20' }, sau đó CLI bị crash khi chạy. Node quá cũ; bản của distro là 18.19.1 và cũng đã hết vòng đời hỗ trợ. Cài bản LTS hiện tại từ NodeSource hoặc nvm (Node 20 đáp ứng phiên bản tối thiểu của CLI nhưng bản thân nó đã hết vòng đời hỗ trợ từ tháng 4 năm 2026), xác nhận bằng node --version. Nếu bạn cài nhiều bản Node, kiểm tra which node đang trỏ đến bản mới, không phải /usr/bin/node.
npm error code EACCES / permission denied, mkdir '/usr/lib/node_modules/...'. Bạn đã cài global vào prefix thuộc sở hữu của root. Không dùng sudo cho lệnh đó. Đặt npm config set prefix ~/.npm-global, thêm ~/.npm-global/bin vào PATH, rồi cài lại bằng user thông thường. Nếu một lần chạy sudo npm trước đó đã tạo các file cache thuộc sở hữu của root (Your cache folder contains root-owned files), chạy sudo chown -R $(id -u):$(id -g) ~/.npm.
Failed to open browser, hoặc redirect_uri trỏ đến http://127.0.0.1:PORT mà bạn không thể truy cập. CLI đã tìm thấy biến display (thường từ ssh -X) và chọn flow loopback, trong đó callback trỏ về server. Chạy NO_BROWSER=true gemini để dùng flow dán code, hoặc dùng đường dẫn API key (GEMINI_API_KEY). Trong một phiên SSH thông thường, bạn sẽ thấy Enter the authorization code:; hãy phê duyệt URL trong browser trên laptop rồi dán code mà Google hiển thị.
Process biến mất khi SSH bị ngắt. Bạn đã chạy gemini trực tiếp từ shell SSH, nên nó là child của shell đó và đã dừng cùng pty khi mất kết nối. Không có gì để khôi phục. Bắt đầu mọi phiên bằng tmux new -A -s gemini và chạy CLI bên trong đó.
Auth vẫn fail dù đã đặt key, CLI quay lại auth picker, hoặc request trả về API key not valid với HTTP 400. Key không nằm trong environment mà CLI nhìn thấy. Xác nhận bằng printenv GEMINI_API_KEY. Nếu kết quả trống, ~/.gemini_env của bạn chưa từng được source. Kiểm tra dòng đó có trong ~/.bashrc không; interactive shell (bao gồm tmux) đọc file này, còn cron và các shell non-interactive khác thì không. Khoảng trắng hoặc dấu quote thừa bên trong giá trị key cũng tạo ra API key not valid.
429 / RESOURCE_EXHAUSTED / thông báo rate limit. Bạn đã chạm quota của tier mà auth đang sử dụng. Chờ window reset, giảm tốc độ của agent hoặc chuyển sang API key có tính phí. Agent bị kẹt trong retry loop sẽ tiếp tục chạm giới hạn này; hãy dừng nó và kiểm tra nó đang làm gì.
FAQ
Làm thế nào để xác thực Gemini CLI trên server không có giao diện?
Hãy dùng API key trả phí, không dùng đăng nhập bằng trình duyệt. Tạo key trong Google AI Studio trên một project đã bật thanh toán, lưu key trong file có mode-600 mà shell của bạn source (export GEMINI_API_KEY=...), rồi CLI sẽ bỏ qua hoàn toàn OAuth browser flow. Nếu đăng nhập bằng Google, chẳng hạn với giấy phép Code Assist Standard hoặc Enterprise, CLI trên máy không có giao diện sẽ in ra một URL; mở URL đó trên laptop, phê duyệt, rồi dán code Google hiển thị vào prompt Enter the authorization code:. Không cần cố định cổng và cũng không cần tunnel, nhưng bạn phải có mặt trước trình duyệt, nên cách này không phù hợp với script. Tài khoản cá nhân miễn phí không còn được Gemini CLI hỗ trợ từ June 18, 2026.
Vì sao cài global bằng npm lại yêu cầu sudo, và làm thế nào để tránh?
Vì global prefix mặc định của npm là /usr/lib/node_modules, nơi user của bạn không có quyền ghi, nên lệnh npm install -g thông thường sẽ fail với EACCES. Cách sửa sai là sudo npm -g. Cách này để lại các file thuộc sở hữu của root và làm các lần cài đặt sau bị lỗi. Cách đúng là trỏ prefix vào home của bạn (npm config set prefix ~/.npm-global) và thêm bin của nó vào PATH, hoặc dùng nvm. nvm tự động cài các package global trong home của bạn.
Làm thế nào để giữ Gemini CLI chạy sau khi ngắt kết nối?
Hãy chạy nó bên trong tmux. Process được khởi động từ SSH shell sẽ chết khi kết nối bị ngắt vì nó là process con của shell đó; tmux chạy shell bên trong một server đã detach, server này vẫn tồn tại sau khi ngắt kết nối. Dùng tmux new -A -s gemini, chạy gemini bên trong, detach bằng Ctrl-b d, rồi attach lại sau bằng tmux attach -t gemini.
Chạy Gemini CLI trên máy production có an toàn không?
Chỉ an toàn nếu cấu hình cẩn thận, vì agent có quyền shell có thể làm mọi thứ mà user chạy nó được phép làm. Chạy nó bằng một user riêng không có đặc quyền và không có sudo, không lưu credential production trên máy, tránh --yolo auto-approval, và dùng --sandbox (Docker hoặc Podman) để cô lập các tool call khỏi host. Account dùng để chạy agent quan trọng hơn bất kỳ flag đơn lẻ nào bạn đặt.
Có cần mở cổng firewall nào cho Gemini CLI không?
Không. Đây là client thực hiện các cuộc gọi HTTPS outbound đến API của Google, nên chỉ cần outbound port 443 và không cần cổng inbound. Google sign-in trên máy không có giao diện cũng không cần cổng: bạn dán code trở lại terminal thay vì nhận callback trên server. Hãy tiếp tục khóa chặt các kết nối inbound.