You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中SSH机器nvm安装后无法执行npm install怎么办

解决SSH远程机器中nvm安装后无法使用node/npm的问题

问题描述

在GitHub Actions中通过SSH连接到远程机器,执行nvm安装脚本后,无法调用node命令或执行npm install,尽管检测到nvm已安装。使用的Actions代码如下:

name: SSH Git Clone

on: [push]

jobs:
  ssh-git-clone:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Create file on SSH server
        uses: appleboy/ssh-action@master
        with:
          host: '${{ secrets.SSH_HOST_DEV }}'
          username: '${{ secrets.SSH_USERNAME_DEV }}'
          password: '${{ secrets.SSH_PASSWORD_DEV }}'
          port: '${{ secrets.SSH_PORT_DEV }}'
          script: |
            curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
            nvm install node 16.19.0

            REPO_DIR="/home/dev/backend"

            eval `ssh-agent -s`
            ssh-add - <<< '${{ secrets.SSH_CLONE_KEY }}'
            rm -rf "$REPO_DIR"
            git clone ${{ github.event.repository.ssh_url }} "$REPO_DIR"
            cd "$REPO_DIR"
            
            npm install

问题原因

  1. 非交互式Shell不加载nvm配置:nvm安装脚本会将环境变量写入~/.bashrc或~/.zshrc,但SSH执行脚本时默认使用非交互式Shell,不会自动加载这些配置文件,导致当前会话无法识别nvm、node、npm命令。
  2. nvm命令格式错误:nvm install node 16.19.0的写法不正确,正确格式应为nvm install 16.19.0。
  3. SSH密钥格式问题:直接用<<<传递密钥可能导致换行符丢失,进而导致密钥无效。

修正后的脚本

将script部分修改为以下内容:

# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 手动加载nvm环境变量,让当前Shell识别nvm命令
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# 安装指定版本的Node.js
nvm install 16.19.0
# 验证Node.js和npm是否可用(可选,用于调试)
node --version
npm --version

REPO_DIR="/home/dev/backend"

# 启动ssh-agent并添加密钥,用echo -e保留密钥换行
eval $(ssh-agent -s)
echo -e '${{ secrets.SSH_CLONE_KEY }}' | ssh-add -
rm -rf "$REPO_DIR"
git clone ${{ github.event.repository.ssh_url }} "$REPO_DIR"
cd "$REPO_DIR"

npm install

关键修正说明

  • 手动加载nvm配置:通过导出NVM_DIR并sourcenvm.sh,强制当前非交互式Shell加载nvm环境,确保node和npm命令可用。
  • 修正nvm安装命令:去掉多余的node参数,直接指定版本号即可正确安装对应版本的Node.js。
  • 修复SSH密钥传递:使用echo -e传递密钥,保留密钥中的换行符,避免密钥格式错误导致Git克隆失败。

另外需要注意:runs-on: ubuntu-latest指定的是GitHub Actions的运行器环境,实际所有Node.js相关操作都是在你通过SSH连接的远程机器上执行,两者环境相互独立,不要混淆。

内容的提问来源于stack exchange,提问作者Tlaloc-ES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:25:38