
先把结论放前面:用 Claude Code、Codex 这类命令行编程 Agent,真正离开你电脑的是"发给模型的上下文"——提示词、Agent 读过的文件片段、它执行命令的输出。项目文件不会被整包上传,但 Agent 读到什么,什么就可能出网。这篇给你一套可落地的自查与防护方案,所有命令可直接照跑。
出网边界:一张表看懂
按"谁发起网络请求"划分,命令行 Agent 的通用情况:
- 会出网:提示词与附件、被读取的文件片段、命令执行输出(含查库结果、环境变量打印)、MCP 服务调用、依赖安装
- 通常不出网:没被读过的文件、本地会话记录
- 视工具而定:遥测与错误上报(多数有关闭开关)
一个流传很广的误区顺手澄清:.gitignore 管的是 git 提交,不是 Agent 的读取权限。Agent 决定直接打开某个路径时,被忽略的文件照样能读。
三层自查:连了哪、关没关、发了啥
第一层,看当前外连。Windows 上用 PowerShell:
Get-NetTCPConnection -State Established |
Select-Object RemoteAddress, RemotePort,
@{n='Proc'; e={(Get-Process -Id $_.OwningProcess).ProcessName}} |
Sort-Object Proc
只应看到模型 API 域名和你主动接入的服务,出现陌生地址先查是哪个插件发起的。

第二层,关闭非必要流量。以 Claude Code 为例:
export DISABLE_TELEMETRY=1
export DISABLE_ERROR_REPORTING=1
# 或一键关掉遥测、上报、自动更新检查
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
第三层,测试项目里抓包看内容(可选):mitmweb --listen-port 8080 起本地代理,HTTPS_PROXY 指过去,Node 系 CLI 记得配 NODE_EXTRA_CA_CERTS 信任代理证书。注意有些工具不走系统代理,抓不到不代表没发;验完撤掉配置,别在真实项目长期挂代理。
密钥防护:四道闸按顺序上
闸一:密钥移出项目目录。 本地密钥放系统钥匙串或密码管理器 CLI,项目里只留 .env.example 写变量名不写值。
闸二:权限规则禁读。 Claude Code 在 .claude/settings.json 里配置拒绝读取 .env、*.pem 等文件。但这道闸拦不住它用 shell 命令去 cat——所以命令执行保持"运行前先问我"才是兜底。
闸三:开工前扫一遍。
gitleaks detect --source . --no-git -v # 扫当前文件
trufflehog filesystem . --only-verified # 只报可验证的有效密钥
误报处理建议:真实告警修完之后,把确认无害的格式(如示例文档里的假 Key)加进 .gitleaksignore,并把扫描挂进 pre-commit 钩子,让人肉记忆变成流程强制。
闸四:给 Agent 干净的环境变量。 它跑 env、打印测试配置时,环境变量会进上下文。Linux/macOS 用 env -i HOME="$HOME" PATH="$PATH" claude 最小化启动;Windows 的等效做法是在 PowerShell 里先 Remove-Item Env: 掉敏感变量再启动,或干脆在干净的系统账号下跑。

验收方式:配置完成后,故意让 Agent "读取 .env 内容"——被拒绝或返回空才算规则生效;再跑一次 gitleaks 确认零告警。
数据库:只读、脱敏、限流三件套
Agent 查库排 bug 很常见,风险要拆成两件事管:能不能写靠账号权限,会不会泄露靠查哪个库。
-- PostgreSQL 只读账号
CREATE ROLE agent_ro LOGIN PASSWORD '换成强密码';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO agent_ro;
ALTER ROLE agent_ro SET default_transaction_read_only = on;
再加两条:优先连测试库或脱敏副本;必须查生产时只对视图授权,把手机号、身份证列挡在视图外。最后在项目说明文件里写死约束——每条查询带 LIMIT、禁止 SELECT *、结果不得贴进提交信息。
还有个更保守的选项:只让 AI 写 SQL 不给它看结果。出网的只有表结构和语句,业务数据留在本地,适合合规要求最严的场景。
合规路线:按账号类型选,不看工具名
公司要求代码不进训练时,四条路按改动从小到大排:确认账号条款(个人订阅与企业账号的数据保留政策往往不同)→ 走云厂商托管模型(如 CLAUDE_CODE_USE_BEDROCK=1)→ 统一走公司自建网关便于审计 → 本地模型数据不出内网(能力差距要有预期,先拿小任务试)。
收尾
核心认知就一句:本地优先不等于离线——任务和会话可以存本机,只要调云端模型,上下文一定出网。能控制的是两件事:Agent 能读到什么(靠目录隔离和权限规则)、发给谁(靠账号条款和网关)。把出网自查、密钥四闸、只读库三件套跑成固定流程,AI 编程的效率红利和安全底线就能同时拿到。

评论0