| name | gemini-auth |
| description | Setup and manage Gemini CLI authentication methods including OAuth, API keys, and Vertex AI. Use when configuring Gemini access, switching auth methods, or troubleshooting authentication issues. |
Gemini Authentication Management
Comprehensive authentication setup and management for Gemini CLI, supporting OAuth, API keys, and Vertex AI.
Authentication Methods
1. Google OAuth (Free Tier)
Benefits:
- No API key management
- 60 requests/minute
- 1,000 requests/day
- Access to Gemini 2.5 Pro
- 1M token context window
gemini
gemini auth status
gemini auth refresh
gemini auth logout
2. API Key Setup
Benefits:
- Programmatic access
- No browser required
- Scriptable workflows
export GEMINI_API_KEY="your-api-key-here"
mkdir -p ~/.gemini
echo 'GEMINI_API_KEY="your-api-key-here"' > ~/.gemini/.env
chmod 600 ~/.gemini/.env
mkdir -p ./.gemini
echo 'GEMINI_API_KEY="your-api-key-here"' > ./.gemini/.env
echo '.gemini/' >> .gitignore
gemini --yolo -p "Test authentication and report status"
3. Vertex AI (Enterprise)
Benefits:
- Enterprise security
- Higher rate limits
- Advanced features
- Service account support
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_CLOUD_LOCATION="us-central1"
gcloud iam service-accounts create gemini-cli \
--display-name="Gemini CLI Service Account"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:gemini-cli@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
gcloud iam service-accounts keys create ~/gemini-sa-key.json \
--iam-account=gemini-cli@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
export GOOGLE_APPLICATION_CREDENTIALS="~/gemini-sa-key.json"
gemini --yolo -p "Test Vertex AI authentication and report project details"
Authentication Configuration
Priority Order
Gemini CLI checks authentication in this order:
- Command-line flags
- Environment variables
- Project .gemini/.env
- User ~/.gemini/.env
- OAuth tokens
- Interactive prompt
Configuration File
{
"auth": {
"method": "oauth",
"autoRefresh": true,
"timeout": 30000
},
"apiKey": {
"source": "env",
"envVar": "GEMINI_API_KEY",
"filePath": "~/.gemini/.env"
},
"vertex": {
"project": "auto",
"location": "us-central1",
"credentials": "auto"
}
}
Workflow Scripts
Multi-Account Management
#!/bin/bash
switch_gemini_account() {
local account=$1
case $account in
personal)
unset GEMINI_API_KEY
unset GOOGLE_APPLICATION_CREDENTIALS
gemini auth logout
gemini
;;
work)
export GEMINI_API_KEY="$(pass show gemini/work-api-key)"
unset GOOGLE_APPLICATION_CREDENTIALS
;;
enterprise)
unset GEMINI_API_KEY
export GOOGLE_CLOUD_PROJECT="company-project"
export GOOGLE_APPLICATION_CREDENTIALS="~/keys/company-sa.json"
;;
*)
echo "Unknown account: $account"
echo "Available: personal, work, enterprise"
return 1
;;
esac
echo "Switched to $account account"
gemini --yolo -p "Test authentication and report current auth method and quota status"
}
test_all_accounts() {
for account in personal work enterprise; do
echo "Testing $account account..."
switch_gemini_account "$account"
gemini --yolo -p
}
switch_gemini_account personal
Secure API Key Storage
#!/bin/bash
sudo apt-get install pass
brew install pass
gpg --gen-key
pass init your-email@example.com
pass insert gemini/api-key
export GEMINI_API_KEY="$(pass show gemini/api-key)"
security add-generic-password \
-a "$USER" \
-s "gemini-api-key" \
-w "your-api-key-here"
export GEMINI_API_KEY="$(security find-generic-password -s 'gemini-api-key' -w)"
Rate Limit Management
#!/bin/bash
gemini_with_retry() {
local prompt="$1"
local use_yolo="${2:-false}"
local max_retries=3
local retry_delay=60
local yolo_flag=""
if [ "$use_yolo" = "true" ]; then
yolo_flag="--yolo"
fi
for i in $(seq 1 $max_retries); do
if gemini $yolo_flag -p "$prompt"; then
return 0
else
if [ $i -lt $max_retries ]; then
echo "Rate limited. Waiting ${retry_delay}s before retry $((i+1))/${max_retries}..."
sleep $retry_delay
retry_delay=$((retry_delay * 2))
fi
fi
done
echo "Failed after $max_retries retries"
return 1
}
() {
prompt=
gemini_with_retry
}
() {
log_file=
timestamp=$( )
>>
today=$( )
count=$(grep | -l)
[ -ge 950 ];
}
Troubleshooting
Debug Authentication
export GEMINI_DEBUG=true
gemini auth debug
gemini auth test oauth
gemini auth test apikey
gemini auth test vertex
Common Issues
- OAuth Token Expired
rm -rf ~/.gemini/auth/tokens
gemini auth refresh
- API Key Not Found
echo $GEMINI_API_KEY
cat ~/.gemini/.env
cat ./.gemini/.env
curl -H "x-api-key: $GEMINI_API_KEY" \
https://generativelanguage.googleapis.com/v1/models
- Vertex AI Permissions
gcloud auth list
gcloud projects get-iam-policy $GOOGLE_CLOUD_PROJECT \
--flatten="bindings[].members" \
--filter="bindings.members:gemini-cli@"
gcloud ai models list --region=$GOOGLE_CLOUD_LOCATION
Security Best Practices
API Key Security
echo '.env' >> .gitignore
echo '.gemini/' >> .gitignore
echo '*.key' >> .gitignore
echo '*.json' >> .gitignore
if [ "$ENV" = "production" ]; then
export GEMINI_API_KEY="$PROD_GEMINI_KEY"
else
export GEMINI_API_KEY="$DEV_GEMINI_KEY"
fi
rotate_api_key() {
local old_key=$GEMINI_API_KEY
local new_key=$(generate_new_key)
export GEMINI_API_KEY=$new_key
if gemini -p "Test new key"; then
revoke_old_key $old_key
echo "Key rotated successfully"
else
export GEMINI_API_KEY=$old_key
echo "Rotation failed, reverting"
fi
}
Audit Logging
#!/bin/bash
audit_gemini() {
local log_dir="~/.gemini/audit"
mkdir -p "$log_dir"
local log_file="${log_dir}/$(date '+%Y-%m-%d').log"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
local user=$(whoami)
local auth_method="unknown"
if [ -n "$GEMINI_API_KEY" ]; then
auth_method="apikey"
elif [ -n "$GOOGLE_APPLICATION_CREDENTIALS" ]; then
auth_method="vertex"
elif [ -f "~/.gemini/auth/tokens" ]; then
auth_method="oauth"
fi
echo "$timestamp | $user | $auth_method | $*" >> "$log_file"
gemini "$@"
}
alias gemini='audit_gemini'
Integration Examples
CI/CD Pipeline
name: Gemini Analysis
on: [push, pull_request]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '20'
- name: Install Gemini CLI
run: npm install -g @google/gemini-cli
- name: Analyze Code
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
gemini --yolo -p "Analyze code quality, generate test reports, and create improvement suggestions"
Docker Integration
# Dockerfile
FROM node:20-alpine
# Install Gemini CLI
RUN npm install -g @google/gemini-cli
# Copy credentials (build-time)
ARG GEMINI_API_KEY
ENV GEMINI_API_KEY=$GEMINI_API_KEY
# Or mount at runtime
# docker run -v ~/.gemini:/root/.gemini ...
WORKDIR /app
COPY . .
CMD ["gemini", "--yolo", "-p", "Analyze application and generate comprehensive report"]
Related Skills
gemini-cli: Main Gemini CLI integration
gemini-chat: Interactive chat sessions
gemini-tools: Tool execution workflows
gemini-mcp: MCP server management