我正在使用node.js,我试图在Web浏览器中嵌入控制台以在远程服务器中工作。 Web应用程序执行连接,因此用户不需要执行ssh [email protected]
,而只需键入命令。ssh与node.js的持久会话
我试过了node.js的'ssh2
模块和其他使用ssh2的模块。但我总是遇到同样的问题。每次我使用exec()
以编程方式执行命令时,ssh会话都会重新启动。我会用一个例子来更好地解释它。
> ls
返回主目录的内容,在主目录中的一个目录mydir
> cd mydir
> ls
回到我的家目录的内容再一次,因为在执行命令后,SSH会话关闭/重新启动。
任何可以完成这项工作的node.js库?或者甚至是一个与JavaScript不同的其他技术库?
编辑:用于澄清,使用的node.js'模块ssh-exec
服务器具有执行使用ssh在其他机器的一些命令的其他例子。在服务器函数包含下面的代码
var c = exec.connection('[email protected]'); // It takes the ssh key from the default location
exec('cd mydir', c).pipe(process.stdout);
exec('ls -lh', c).pipe(process.stdout);
正如你可以看到我不是结束前exec
但我得到的输出是主目录mydir目录中没有的内容的内容之后的连接,因为在每个exec
之后ssh会话都会重置。
不是这样的。我使用ajax来调用服务器中的一个函数,该函数使用先前创建的shh连接并执行'connection.exec('cd mydir')'。后来,其他ajax请求用其他命令调用该函数;该函数执行执行'connection.exec('ls')'的命令。我没有输出问题,并得到它并打印正常,但输出不是预期的(它不是mydir的内容,而是主目录的内容),因为ssh会话似乎被重置在每个exec之后:( –
不会有太大的变化,你的exec-call仍然有一个新的上下文,你需要在服务器端打开ssh连接并保持打开状态(如果你愿意的话,还可以设置空闲超时) – CFrei
我是什么试图解释的是,这是行不通的。如果我在服务器端以编程方式打开一个连接,之后立即执行'connection.exec('cd mydir')'并立即执行'connection.exec('ls ')'结果不是预期的,因为连接似乎在每次执行后都被重置,我将编辑我的问题来澄清一个例子。 –