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

Node.js使用ssh2模块报错TypeError: <Object> is not a constructor如何解决

ssh2报错TypeError: NodeSSH is not a constructor解决办法

问题根源

你混淆了两个不同的npm包:当前安装的ssh2@1.1.0包本身没有NodeSSH导出项,NodeSSH是另一个封装包node-ssh的导出构造器,所以调用new NodeSSH()时才会抛出类型错误。

不同场景的解决方案

场景1:继续使用已安装的ssh2包

直接使用ssh2内置的Client构造器即可,正确写法如下:

const { Client } = require('ssh2');
const c = new Client();

c.on('keyboard-interactive', function(name, instructions, instructionsLang, prompts, finish) {
    console.log('Connection :: keyboard-interactive');
    finish(['pswd']);
}).on('end', function() {
    console.log('Connection :: end');
    // 注:原代码中的callback()需提前定义,否则会触发未定义报错
    // console.log(callback());
}).on('error', function(error) {
    console.log(error);
}).connect({
    host: 'XX.XX.XXX.XXX',
    username: 'usr',
    port: 22,
    tryKeyboard: true,
    debug: console.log
});

场景2:需要使用NodeSSH相关API

你需要先安装对应的依赖包,执行安装命令:
npm install node-ssh
安装完成后即可使用你之前的第三种写法,不会再报错。

原有写法的问题说明

  • 第一种写法:ssh2默认导出为包含多个属性的对象,不是构造函数,直接调用new NodeSSH()会报错
  • 第二种写法:仅正确导入了Client构造器,后续实例化时没有使用new Client()而是继续调用不存在的NodeSSH,依旧报错
  • 第三种写法:ssh2包不存在NodeSSH导出项,解构得到的值为undefined,调用new undefined自然会抛出类型错误

内容的提问来源于stack exchange,提问作者eemilk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:18:02