如何打开持久的 SSH 客户端来制作基于 Web 的文件管理器?
我目前正在使用
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:布拉德回答后,安装可能无法在这里工作,因为
- 我们对该服务器的访问权限非常有限(不确定是否可以安装)
这里的代码有些简化。真正的流程是:
Local -> SSH Server -> AnAppThatManagesCloudBuckets <command> -> Output
您的代码容易受到命令注入的影响,并且本质上是不安全的,并且对于边缘情况可能不可靠,例如带有保留字符的路径/文件名。
我会推荐一种完全不同的方法。使用 SSHFS 挂载远程文件系统。然后,使用标准的 Node.js fs API 做目录列表等。