@aikidosec/safe-chain

中文文档
1.5.27发布于 2026/10/30AGPL-3.0-or-laterES Module构建来源已验证近 30 天下载 132.3万

爱奇艺安全链环绕 (npm cli) (英语), (中文(简体) ), npx 数据, (中文(简体) ), 线条, (中文(简体) ), 小时, (中文(简体) ), 密码, [刷 (https)

中文使用文档
文档目录39 节
  1. 需要 npm & PyPI 以外的保护吗 ?
  2. 安装
  3. Unix/Linux/macOS (英语)
  4. 视窗( PowerShell)
  5. 下载完整性
  6. 验证安装
  7. 如何运作
  8. 恶意屏蔽
  9. 最低包装年龄
  10. 壳牌集成
  11. 卸载
  12. Unix/Linux/macOS (英语)
  13. 视窗( PowerShell)
  14. 日志
  15. 配置选项
  16. 文件日志
  17. 配置选项
  18. 最低包装年龄
  19. 配置选项
  20. 不包括软件包
  21. 自定义注册
  22. 配置选项
  23. PYPI 配置文件
  24. 恶意列表基址
  25. 配置选项
  26. 工程配置文件
  27. 自定义安装目录
  28. Unix/Linux/macOS (英语)
  29. 窗口
  30. CI/CD安装
  31. Unix/Linux/macOS (GitHub Actions, Azure Pipelines等) (英语)
  32. Windows (Azure Pipelines等) (英语)
  33. 支持的平台
  34. GitHub 动作示例
  35. Azure DevOps 实例
  36. CircleCI 示例
  37. Jenkins 实例
  38. Bitbucket 管道示例
  39. GitLab 管道实例

Aikido Safe Chain

爱奇艺安全链

NPM Version NPM Downloads

  • ✅ 在开发者笔记本电脑和CI/CD上屏蔽恶意软件
  • ✅ 支持 npm 和 PyPI 更多软件包管理者来了
  • ✅ 超过48小时的新块包 没有打破你的建筑
  • ✅ 无托肯,免费,没有共享的构建数据

需要 npm & PyPI 以外的保护吗 ?

Aikido 设备保护 以安全链为基础,在更多生态系统中推广一揽子服务和推广安全: 无, (中文(简体) ), PyPI 密码, (中文(简体) ), VS 代码, (中文(简体) ), 打开 VSX - (教师,风起云起,基罗,Vs Codium,.), 马文, (中文(简体) ), 新建, (中文(简体) ), 色调扩展, (中文(简体) ), 走开, (中文(简体) ), 技能.sh 人工智能技能, (中文(简体) ), 鲁比, (中文(简体) ), 锈还有更多.

获得中央政策管理,请求和批准工作流程,以及您所在的每个开发者工作站的能见度. 由同名相克多英特尔提供电力. 手动部署或通过您的MDM工具(Jamf, Fleet, 或 Iru)管理.


Aikido安全链支持以下软件包管理器:

  • 📦 无
  • 📦 npx 数据
  • 📦 线条
  • 📦 小时
  • 📦 密码
  • 📦 抓紧
  • 📦 急流
  • 📦 包头
  • 📦 bunx 语句
  • 📦 管道
  • 📦 页3
  • 📦 页:1
  • 📦 诗歌
  • 📦 阴性
  • 📦 皮普克语name
  • 📦 时间

使用量

Aikido Safe Chain demo

安装

安装 Aikido 安全链与安装脚本很容易 .

Unix/Linux/macOS (英语)

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
  && echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c - \
  && sh /tmp/install-safe-chain.sh \
  && rm /tmp/install-safe-chain.sh

视窗( PowerShell)

$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "9B9F329CB3E6EFC3B1BFB8B0B791F546FA52AC6CA791C8E9961C5830936D64F3"
if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) {
    Remove-Item $installer -ErrorAction SilentlyContinue
    throw "Checksum verification failed for install-safe-chain.ps1"
}
& $installer
Remove-Item $installer

上面的安装命令总是引用一个特定的放出. 要安装不同的版本, 请用您想要的版本编号替换该版本 。 所有现有版本都在 页 次。 。 。 .

下载完整性

安装脚本来自一个版本的发布 URL(releases/download/1.5.27/...) (中文(简体) ). GitHub发布是不可改变的——一旦一个文物在一个版本的URL上被发布,它就不能被修改或被替换,所以你下载的文件被保证是所发布的内容.

验证安装

  1. 重新启动您的终端 开始使用 Aikido 安全链.

    • 这一步骤至关重要,因为它确保了npm,npx,纱线,pnpm,pnpx,快活,快活,快活,包子,活口,活口,活口,活口,活口,活口3,诗歌,uv,活口,活口和活口等外壳别名的装入正确. 如果您不重新启动您的终端, 将无法使用此化名 .
  2. 验证安装 通过运行验证命令:

    npm safe-chain-verify
    pnpm safe-chain-verify
    pip safe-chain-verify
    uv safe-chain-verify
    
    # Any other supported package manager: {packagemanager} safe-chain-verify
    
    • 输出应显示"OK:安全链工作!",确认Aikido安全链安装和运行正常.
  3. (备选) 测试恶意软件屏蔽 尝试安装测试包:

    对于JavaScript/Node.js:

    npm install safe-chain-test
    

    为彼道:

    pip3 install safe-chain-pi-test
    
    • 输出应显示 Aikido Safe Chain 正在阻挡这些测试包的安装,因为它们被标记为恶意软件.

运行时 npm, (中文(简体) ), npx, (中文(简体) ), yarn, (中文(简体) ), pnpm, (中文(简体) ), pnpx, (中文(简体) ), rush, (中文(简体) ), rushx, (中文(简体) ), bun, (中文(简体) ), bunx, (中文(简体) ), pip, (中文(简体) ), pip3, (中文(简体) ), uv, (中文(简体) ), uvx, (中文(简体) ), poetry, (中文(简体) ), pipx 财务报告和审定财务报表 pdm 命令,Aikido安全链将自动检查您想要安装的软件包中的恶意软件。 它还拦截了Python模块在可用时对 pip 的引用(例如, python -m pip install ..., (中文(简体) ), python3 -m pip download ...) (中文(简体) ). 如果发现任何恶意软件,将促使您退出命令.

您可以通过运行检查已安装的版本 :

safe-chain --version

如何运作

恶意屏蔽

Aikido安全链通过运行一个轻量级代理服务器来工作,该服务器截取了从npm注册和PyPI的软件包下载. 当您运行 npm, npx, 纱线, pnpm, pnpx, 急速, 急速, 包子, bunx, pip, pip3, uv, uv, uv, 诗歌, pipx 或 pdm 命令时, 所有软件包的下载都会通过这个本地代理程序进行路由, 该代理程序可以实时验证软件包的对应性 Aikido Intel - 开源威胁情报。如果在任何软件包中检测到恶意软件(包括深层依赖性),则代理在恶意代码到达您机器之前会屏蔽下载.

最低包装年龄

安全链对所支持的生态系统进行最小包装年龄检查.

目前的执行情况因生态系统而异:

  • npm 软件包管理器 :
    • 在普通软件包解析过程中,安全链会压制比登记册返回的软件包元数据所配置的最小年龄更新的版本
    • 对于绕过元数据流的直接软件包下载请求,Safe Chain可以使用缓存的新发布的软件包列表来屏蔽请求本身
  • Python 软件包管理器 :
    • 在软件包解析过程中,安全链压制太年轻文件和从 PyPI 元数据响应中发布
    • 对于绕过元数据流的直接软件包下载请求,Safe Chain可以使用缓存的新发布的软件包列表来屏蔽请求本身

默认情况下,最低包裹年龄为48小时. 这在新出版的软件包最容易受到未察觉到的威胁的关键时期,提供了额外的安全层. 您可以配置此阈值或绕过此保护 - 见 最小套件年龄配置 下节.

对于紧急的 CVE 修复,Aikido 确认补丁的发布没有恶意软件,安全链解除了它的最低年龄检查,所以在等待出窗时,你不会被它修复的弱点所暴露.

壳牌集成

相克多安全链与你的外壳相融合,在使用npm,npx,纱线,pnpm,pnpx,匆忙,快克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 它为这些命令设置了别名,使其被Aikido Safe Chain命令所包裹,这些命令在执行原始命令之前管理代理服务器. 目前我们支持:

  • ✅ 巴许
  • ✅ 日语
  • ✅ 鱼
  • ✅ 动力壳
  • ✅ 动力壳核心

更多关于 shell 集成的信息可见于 shell 集成文档。 。 。 .

卸载

要解开Aikido安全链,请使用我们的一行解码器:

Unix/Linux/macOS (英语)

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/uninstall-safe-chain.sh | sh

视窗( PowerShell)

iex (iwr "https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/uninstall-safe-chain.ps1" -UseBasicParsing)

重新启动您的终端 在未加总注之后,以确保删除所有别名.

配置

日志

您可以使用 --safe-chain-logging 旗帜或 SAFE_CHAIN_LOGGING 环境变量.

配置选项

您可以通过多个来源设定日志级别( 按优先顺序排列 ):

  1. CLI 参数 (最高优先级):

    • --safe-chain-logging=silent - 禁止所有Aikido安全链输出,除非恶意软件被屏蔽。 软件包管理器输出被写成 stdout 正常,如果安全链屏蔽了恶意软件并导致进程退出,则只写一个短消息.

      npm install express --safe-chain-logging=silent
      
    • --safe-chain-logging=verbose - 启用爱基多安全链的详细诊断输出。 对解决问题或了解安全链在幕后在做什么很有用.

      npm install express --safe-chain-logging=verbose
      
  2. 环境变量数字 :

    export SAFE_CHAIN_LOGGING=verbose
    npm install express
    

    有效值 : silent, (中文(简体) ), normal, (中文(简体) ), verbose

    用于为终端会话或 CI/CD 环境中的所有软件包管理器设定默认的日志级别 .

文件日志

您可以使用 : --safe-chain-log-file 旗帜或 SAFE_CHAIN_LOG_FILE 环境变量。 文件日志默认被禁用, 当设置路径时启用 。 文件格式 (E)--safe-chain-log-file-format)和动词(--safe-chain-log-file-verbosity)与终端输出独立控制.

配置选项

通过其中任何一项(按优先顺序排列):

  1. CLI 参数 (最高优先级):

    npm install express \
      --safe-chain-log-file=~/safe-chain.log \
      --safe-chain-log-file-format=plain \
      --safe-chain-log-file-verbosity=normal
    
  2. 环境变量数字 :

    export SAFE_CHAIN_LOG_FILE=~/safe-chain.log
    export SAFE_CHAIN_LOG_FILE_FORMAT=plain
    export SAFE_CHAIN_LOG_FILE_VERBOSITY=normal
    
  3. 配置文件 (单位:千美元)~/.safe-chain/config.json:

    {
      "logFile": "~/safe-chain.log",
      "logFileFormat": "plain",
      "logFileVerbosity": "normal"
    }
    

logFileFormat —— 说 json (违约)或 plain。 。 。 .

logFileVerbosity —— 说 silent, (中文(简体) ), normal,或 verbose (默认). 独立 --safe-chain-logging。 。 。 .

最低包装年龄

您可以配置在安全链允许安装之前必须存在多长时间的软件包 。 默认情况下,包必须至少48小时后才能被安装.

对于基于npm的软件包管理器,此检查目前有两个执行模式:

  • 安全链在正常依赖解析时会从包元数据中压制太年轻版本.
  • 安全链在与被缓存的新发布的软件包列表相匹配时会阻断直接的软件包下载请求.

对于 Python 软件包管理器,此检查目前有两个执行模式:

  • 安全链在依赖解析时会压制太年轻的文件并发布PyPI元数据.
  • 安全链在与被缓存的新发布的软件包列表相匹配时会阻断直接的软件包下载请求.

配置选项

您可以通过多个来源( 按优先级排序) 设定最小包装年龄 :

  1. CLI 参数 (最高优先级):

    npm install express --safe-chain-minimum-package-age-hours=48
    
  2. 环境变量数字 :

    export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_HOURS=48
    npm install express
    
  3. 配置文件 (单位:千美元)~/.safe-chain/config.json:

    {
      "minimumPackageAgeHours": 48
    }
    

不包括软件包

排除通过环境变量或配置文件进行最小年龄过滤的可信任包(两者被合并). 使用 @scope/* 信任一个组织的所有软件包:

export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="@aikidosec/*"
{
  "npm": {
    "minimumPackageAgeExclusions": ["@aikidosec/*"]
  },
  "pip": {
    "minimumPackageAgeExclusions": ["requests"]
  }
}

自定义注册

配置安全链从自定义或私人注册处扫描包.

支助的生态系统:

  • 节点.js
  • 蟒

配置选项

您可以通过环境变量或配置文件设置自定义注册 。 两个来源合并.

  1. 环境变量 (合并分离):

    export SAFE_CHAIN_NPM_CUSTOM_REGISTRIES="npm.company.com,registry.internal.net"
    export SAFE_CHAIN_PIP_CUSTOM_REGISTRIES="pip.company.com,registry.internal.net"
    
  2. 配置文件 (单位:千美元)~/.safe-chain/config.json:

    {
      "npm": {
        "customRegistries": ["npm.company.com", "registry.internal.net"]
      },
      "pip": {
        "customRegistries": ["pip.company.com", "registry.internal.net"]
      }
    }
    

PYPI 配置文件

如果你依赖一个 pip.conf 用于 pip 配置的文件,您必须通过 PIP_CONFIG_FILE 环境变量,以便安全链可以合并.

安全链在它的MITM代理机后运行pip并写出一个临时pip配置文件来注入它的证书和代理设置. 何时 PIP_CONFIG_FILE 设置, 安全链将其设置合并到文件副本中( 您的原始文件从未被修改) 所以 index-url,保存证书和其他选项。 何时 PIP_CONFIG_FILE 未设置, pip 的用户级配置(例如) . ~/.config/pip/pip.conf) 可能被“ 安全链” 的临时文件所覆盖, 您的设置将不会被选中 .

恶意列表基址

配置安全链从自定义镜像 URL 获取恶意软件数据库和新软件包列表 。 这使得您可以托管您自己的 Aikido 恶意软件数据库副本 .

配置选项

您可以通过多个来源设置恶意软件列表基址( 按优先级排序):

  1. CLI 参数 (最高优先级):

    npm install express --safe-chain-malware-list-base-url=https://your-mirror.com
    
  2. 环境变量数字 :

    export SAFE_CHAIN_MALWARE_LIST_BASE_URL=https://your-mirror.com
    npm install express
    
  3. 配置文件 (单位:千美元)~/.safe-chain/config.json:

    {
      "malwareListBaseUrl": "https://your-mirror.com"
    }
    

基准 URL 应当指向一个反映 https://malware-list.aikido.dev/,包括下列路径:

  • /malware_predictions.json (JavaScript生态系统恶意软件数据库)
  • /malware_pypi.json (Python生态系统恶意软件数据库)
  • /releases/npm.json (贾瓦脚本新软件包列表)
  • /releases/pypi.json (Python新软件包列表)

工程配置文件

除了家谱配置文件外(~/.safe-chain/config.json),"安全链"(Safe Chain)支持一个项目配置文件,这样可以将设置检查到一个寄存器中,并在一个团队之间共享,而不是被配置每个机器.

添加一个 safe-chain: 区域 .aikido 文件位于您的寄存器的根部( 其他 Aikido 工具使用的相同文件, 安全链只读取它自己的 safe-chain: 部分,而忽略其余部分。 当找到时, 它的设置被合并到您家目录配置文件的顶部: 工程配置中设置的值占据优先级, 以及数组( 例如 ) customRegistries)从两个文件中合并,而不是一个取代另一个.

从工程配置文件中只能设置以下设置 :

safe-chain:
  minimumPackageAgeHours: 48
  npm:
    customRegistries:
      - npm.company.com
    minimumPackageAgeExclusions:
      - "@aikidosec/*"
  pip:
    customRegistries:
      - pip.company.com
    minimumPackageAgeExclusions:
      - requests

设置如 scanTimeout, (中文(简体) ), malwareListBaseUrl,则 logFile* 无法从工程配置文件设置选项 - 它们只能来自您的家目录配置、 CLI 参数或环境变量 .

自定义安装目录

默认情况下,安全链会安装到 ~/.safe-chain。您可以通过向安装器传递一个明确的安装目录来修改此内容。 这对于全系统的安装(例如Docker图像内部)或当需要避免与其他工具相冲突时,都是有用的.

设定时,所有安全链数据(二进制、shims、脚本、配置)都放在自定义目录下,而不是 ~/.safe-chain。 。 。 .

Unix/Linux/macOS (英语)

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
  && echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c - \
  && sh /tmp/install-safe-chain.sh --install-dir /usr/local/.safe-chain \
  && rm /tmp/install-safe-chain.sh

窗口

$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "9B9F329CB3E6EFC3B1BFB8B0B791F546FA52AC6CA791C8E9961C5830936D64F3"
if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) {
    Remove-Item $installer -ErrorAction SilentlyContinue
    throw "Checksum verification failed for install-safe-chain.ps1"
}
& $installer -InstallDir 'C:\ProgramData\safe-chain'
Remove-Item $installer

CI/CD的使用情况

通过将Aikido安全链集成到您的构建过程中,您可以保护您的 CI/CD 管道免受恶意包的伤害. 这将确保您自动构建期间安装的任何软件包在安装前都会被检查为恶意软件.

CI/CD安装

使用 --ci 为 CI/CD 环境自动配置 Aikido 安全链。 这在 PATH 中设置可执行的 shims 而不是 shell 化名 .

Unix/Linux/macOS (GitHub Actions, Azure Pipelines等) (英语)

curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
  && echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c - \
  && sh /tmp/install-safe-chain.sh --ci \
  && rm /tmp/install-safe-chain.sh

Windows (Azure Pipelines等) (英语)

$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "9B9F329CB3E6EFC3B1BFB8B0B791F546FA52AC6CA791C8E9961C5830936D64F3"
if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) {
    Remove-Item $installer -ErrorAction SilentlyContinue
    throw "Checksum verification failed for install-safe-chain.ps1"
}
& $installer -ci
Remove-Item $installer

支持的平台

  • ✅ GitHub 动作
  • ✅ 水管
  • ✅ 圆CI
  • ✅ 詹金斯(英语:
  • ✅ 点球管
  • ✅ GitLab 管道

GitHub 动作示例

- name: Setup Node.js
  uses: actions/setup-node@v4
  with:
    node-version: "22"
    cache: "npm"

- name: Install safe-chain
  run: |
    curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh
    echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c -
    sh /tmp/install-safe-chain.sh --ci
    rm /tmp/install-safe-chain.sh

- name: Install dependencies
  run: npm ci

Azure DevOps 实例

- task: NodeTool@0
  inputs:
    versionSpec: "22.x"
  displayName: "Install Node.js"

- script: |
    curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh
    echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c -
    sh /tmp/install-safe-chain.sh --ci
    rm /tmp/install-safe-chain.sh
  displayName: "Install safe-chain"

- script: npm ci
  displayName: "Install dependencies"

CircleCI 示例

version: 2.1
jobs:
  build:
    docker:
      - image: cimg/node:lts
    steps:
      - checkout
      - run: |
          curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh
          echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c -
          sh /tmp/install-safe-chain.sh --ci
          rm /tmp/install-safe-chain.sh
      - run: npm ci
workflows:
  build_and_test:
    jobs:
      - build

Jenkins 实例

注:这假设节点.js和npm安装在詹金斯代理上.

pipeline {
  agent any

  environment {
    // Jenkins does not automatically persist PATH updates from setup-ci,
    // so add the shims + binary directory explicitly for all stages.
    // If you installed into a custom directory, replace ~/.safe-chain with that path here.
    PATH = "${env.HOME}/.safe-chain/shims:${env.HOME}/.safe-chain/bin:${env.PATH}"
  }

  stages {
    stage('Install safe-chain') {
      steps {
        sh '''
          set -euo pipefail

          # Install Safe Chain for CI
          curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh
          echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c -
          sh /tmp/install-safe-chain.sh --ci
          rm /tmp/install-safe-chain.sh
        '''
      }
    }

    stage('Install project dependencies etc...') {
      steps {
        sh '''
          set -euo pipefail
          npm ci
        '''
      }
    }
  }
}

Bitbucket 管道示例

image: node:22

steps:
  - step:
      name: Install
      script:
        - |
          curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh
          echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c -
          sh /tmp/install-safe-chain.sh --ci
          rm /tmp/install-safe-chain.sh
        - export PATH=~/.safe-chain/shims:~/.safe-chain/bin:$PATH
        - npm ci

在设置后,您CI管道中所有后续的软件包管理器命令都会被Aikido Safe Chain的恶意软件检测自动保护.

GitLab 管道实例

要在GitLab管道中添加安全链,需要在运行管道的图像中安装. 可通过下列方式做到这一点:

  1. 定义运行您构建的嵌入文件

    FROM node:lts
    
    # Install safe-chain
    RUN curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.27/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
      && echo "600ebddcb3aaf1fd53653a8d7985df44528722c0f5ee7eb9fff86f26a1a4e5a8  /tmp/install-safe-chain.sh" | sha256sum -c - \
      && sh /tmp/install-safe-chain.sh --ci \
      && rm /tmp/install-safe-chain.sh
    
    # Add safe-chain to PATH (update paths if you used a custom install dir)
    ENV PATH="/root/.safe-chain/shims:/root/.safe-chain/bin:${PATH}"
    
  2. 在您的 CI 管道中构建 Docker 图像

    build-image:
      stage: build-image
      image: docker:latest
      services:
        - docker:dind
      script:
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
        - docker build -t $CI_REGISTRY_IMAGE:latest .
        - docker push $CI_REGISTRY_IMAGE:latest
    
  3. 使用您管道中的图像 :

    npm-ci:
      stage: install
      image: $CI_REGISTRY_IMAGE:latest
      script:
        - npm ci
    

这个例子的整个管道看起来是这样的:

stages:
  - build-image
  - install

build-image:
  stage: build-image
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:latest

npm-ci:
  stage: install
  image: $CI_REGISTRY_IMAGE:latest
  script:
    - npm ci

解决问题

有问题吗? 见 解决问题指南 帮助解决常见问题.

报告问题

遇到问题时:

  1. 访问 GitHub 问题
  2. 包括:
    • 操作系统和版本
    • 贝壳类型和版本
    • safe-chain --version 产出
    • 核查命令输出
    • 失败命令的读取日志( 添加 --safe-chain-logging=verbose 参数)

版本与发布记录

@aikidosec/safe-chain 共发布 73 个版本,首次发布于 2025/07/09;过去 12 个月发布了 49 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.5.27latest2026/10/308 天前
1.5.262026/10/2216 天前
1.5.252026/10/0929 天前
1.5.242026/10/011 个月前
1.5.232026/09/291 个月前
1.5.212026/09/251 个月前

其他发布通道:dir → 0.0.1-custom-install-dir,beta → 0.0.1-sha256-in-installer-beta。

关于 @aikidosec/safe-chain 的常见问题

@aikidosec/safe-chain 是什么?

爱奇艺安全链环绕 (npm cli) (英语), (中文(简体) ), npx 数据, (中文(简体) ), 线条, (中文(简体) ), 小时, (中文(简体) ), 密码, [刷 (https)

如何安装 @aikidosec/safe-chain?

在项目目录运行 npm install @aikidosec/safe-chain,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 aikido-uv、aikido-bun、aikido-npm、aikido-npx、aikido-pdm、aikido-pip、aikido-uvx、safe-chain、aikido-bunx、aikido-pip3、aikido-pipx、aikido-pnpm,可以用 npx aikido-uv 直接运行。

@aikidosec/safe-chain 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/aikidosec__safe-chain 是否存在。

@aikidosec/safe-chain 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@aikidosec/safe-chain 可以商用吗?

@aikidosec/safe-chain 使用 AGPL-3.0-or-later 许可。最严格的 Copyleft:除分发外,通过网络向用户提供基于它的服务也需要开源对应源码。闭源 SaaS 使用前务必评估。以上为概括,不构成法律意见,请以许可原文为准。

@aikidosec/safe-chain 的下载量有多少?

根据 npm 官方下载统计,@aikidosec/safe-chain 在 2026/10/05 – 2026/11/03 这 30 天内被下载 1,322,683 次,日均约 44,089 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aikidosec/safe-chain 还在维护吗?

最新版本 1.5.27 发布于 2026/10/30(8 天前);至今共发布 73 个版本,其中过去 12 个月发布了 49 个;首次发布于 2025/07/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。