javascript 如何打开一个持久的SSH客户端,使基于Web的文件管理器?

eyh26e7m  于 2023-05-21  发布在  Java
关注(0)|答案(2)|浏览(267)

我目前使用shelljs来建立连接,每次它需要使用ssh函数。

class Connection {
  constructor(id, path) {
    this.id = id;
    this.path = path;
  }

  exec(silent, ...args) {
    const { exec } = shellJS;
    const execCmd = exec(
      ['ssh ', ...args].join(' '),
      { silent }
    );
    // FormError(execCmd);
    return execCmd;
  }
}

class FileManager {
  constructor(connection) {
    this.connection = connection;
  }

  async ls(path = '') {
    const newPath = path ? `'${path}/'` : '';
    const listing = this.connection.exec(false, `"ls -l ${newPath}"`);
    return parseEntries(listing.stdout);
  }
}

**EDIT1:**从布拉德回答后,安装将可能无法在这里工作,因为

1.我们对该服务器的访问非常有限(不确定是否可以挂载)
1.这里的代码有些简化。真实的的流程是:

Local -> SSH Server
-> AnAppThatManagesCloudBuckets <command>
-> Output
zyfwsgd6

zyfwsgd61#

您的代码会受到命令注入的影响,并且本质上是不安全的,并且对于边缘情况可能不可靠,例如带有保留字符的路径/文件名。
我会推荐一个完全不同的方法。使用SSHFS挂载远程文件系统。然后,使用标准的Node.js fs API来执行目录列表等操作。

e0uiprwp

e0uiprwp2#

经过进一步的研究,我们发现了3个可以用来在后台创建持久性SSH客户端的包:
正如@ChrisG所说。

  1. ssh2,基本上是用JS编写的SSH模块
  2. pty.js一个伪终端模拟器
  3. node-ptypty.js的一个分支

相关问题