goland中禁用明文token:勿存于.env或运行配置,应使用系统环境变量或secure variables密钥环,远程开发时须禁用本地变量并严格管控远端环境,ci场景禁用remote development。

GoLand 里别把 token 写进 .env 或运行配置的 Environment variables 栏
很多人图方便,在 GoLand 的 Run Configuration → Environment variables 里直接填 NPM_TOKEN=xxx 或 GITHUB_TOKEN=xxx,甚至加到项目根目录的 .env 文件里。这等于把密钥明文塞进 Git 可见路径或 IDE 配置 XML(.idea/runConfigurations/xxx.xml),一旦误提交,token 就裸奔了。
实际场景中,这类配置常被 CI 脚本读取、被同事 clone 后直接复用、甚至被 IDE 插件自动同步到云端——风险远高于想象。
- 绝对不要在
.env文件里存任何生产级 token;开发用的 dummy 值也建议用DEV_TOKEN_PLACEHOLDER这类占位符 - GoLand 的运行配置 XML 默认不 ignore,必须手动加到
.gitignore:.idea/runConfigurations/*.xml - 如需本地调试依赖 token,优先走系统级环境变量(
export NPM_TOKEN=xxx),再让 GoLand 继承 Shell 环境(Settings → Tools → Terminal → “Shell path” 设为真实 shell,并勾选 “Activate environment variables in terminal”)
用 GoLand 的 Secure Variables 功能替代明文变量
GoLand 2023.3+ 支持在 Run Configuration 中使用 $SECURE{key} 占位符,配合 IDE 内置密钥环(Keyring)存储敏感值。它不会写入 XML,也不会出现在日志或 UI 显示中,比手动 export 更可控。
启用方式:Run → Edit Configurations → Environment variables → 点击右侧 + → 选择 Secure variable → 输入 key(如 NPM_TOKEN)→ 粘贴值 → 确认后输入系统密码解锁密钥环。
- 首次使用会触发系统密钥环授权(macOS Keychain / Windows Credential Manager / Linux GNOME Keyring),后续自动解密
- 该值只在当前用户、当前机器生效,换设备或重装系统需重新录入
- 注意:GoLand 的
Secure Variables不支持跨项目共享,每个 Run Configuration 都得单独配
远程开发模式下,token 泄露风险翻倍
当你用 GoLand 的 Remote Development(SSH 模式)时,IDE 会在远端服务器上生成临时构建脚本和运行环境。如果本地 Run Configuration 里用了明文变量,这些变量可能被拼进远端的 env 字符串并记录在 ~/.cache/JetBrains/GoLand*/log/ 或 /tmp/ 下的临时 sh 脚本里。
更危险的是,部分插件(如 Docker、SSH Config)会把环境变量透传到远端 shell,而远端服务器若未设 log 权限隔离,ps aux 或 history 就可能暴露 token。
- 远程开发时,禁用所有本地
Environment variables,改用远端服务器的~/.bashrc或/etc/environment设置(且确保这些文件不在 Git 管理中) - 检查远端
~/.bash_history和/var/log/auth.log是否记录了含_token或auth的命令行 - 如果必须动态传 token,用
ssh -o SendEnv=NPM_TOKEN+ 服务端AcceptEnv NPM_TOKEN,但务必限制 AcceptEnv 白名单,避免通配符
CI/CD 流水线和 GitHub Actions 的联动陷阱
很多人以为“本地安全了就万事大吉”,结果在 GitHub Actions 里用 env: { NPM_TOKEN: ${{ secrets.NPM_TOKEN }} } 时,忘了 GoLand 的 Remote Development 会把本地 Run Configuration 同步到远端,而远端恰好是 Actions runner —— 这时候 secrets.NPM_TOKEN 就可能被 IDE 自动注入进远端进程环境,再被 log 截获。
GitHub Actions 的 secrets 是 masked,但一旦进到 runner 的 shell 环境,就和普通变量无异。尤其当 GoLand 在 runner 上启动调试会话时,ps 输出里很容易看到完整 token。
- 禁止在 GitHub Actions runner 上启用 GoLand 的 Remote Development 模式;CI 场景只用 CLI(
go test,npm publish) - 如果必须用 IDE 调试 CI 流程,改用本地 SSH 连到干净的测试机,而非复用 Actions runner
- 所有
secrets.xxx变量名避免含token、key、auth等关键词,防止被扫描工具匹配命中











