gpt4 book ai didi

javascript - Nodejs ssh2 仅在一个终端运行多个命令

转载 作者:行者123 更新时间:2023-11-30 10:14:02 28 4
gpt4 key购买 nike

我在项目中编写 ssh2 模块时遇到了麻烦。我试图在一个终端上运行多个命令来管理远程 Linux 系统。例如“bc”命令为您提供了一个基本的计算器,您可以运行它进行基本操作。但是这种进程在你使用的时候需要处于唤醒状态(它会接受两个或更多的输入,并作为结果给出响应)。

我需要创建一个类似使用 websocket 和 ssh 的系统。当 websocket 收到一个命令时,ssh Node 需要执行这个消息,模块需要通过 websocket.send() 发送它的响应

我正在使用 Node.js websocket,ssh2 客户端。

这里是我的代码:

#!/usr/bin/node
var Connection = require('ssh2');
var conn = new Connection();

var command="";
var http = require('http');
var WebSocketServer = require('websocket').server;
var firstcom=true;
conn.on('ready', function() {
console.log('Connection :: ready');
// conn.shell(onShell);

});

var onShell = function(err, stream) {

// stream.write(command+'\n');

stream.on('data', function(data) {
console.log('STDOUT: ' + data);
});

stream.stderr.on('data', function(data) {
console.log('STDERR: ' + data);

});

}



var webSocketsServerPort=5000;
var ssh2ConnectionControl=false;

var server = http.createServer(function (req, res) {
//blahbalh
}).listen(webSocketsServerPort, function() {
console.log((new Date()) + " Server is listening on port:: " + webSocketsServerPort);
});

//console.log((new Date()) + 'server created');

wsServer = new WebSocketServer({
httpServer: server,
// autoAcceptConnections: false
});

wsServer.on('request', function(request) {
console.log((new Date()) + ' Connection from origin ' + request.origin + '.');
var wsconnection = request.accept('echo-protocol', request.origin);
console.log((new Date()) + ' Connection accepted.');

if(!ssh2ConnectionControl){
conn.connect({
host: 'localhost',
port: 22,
username: 'attilaakinci',
password: '1'
});
ssh2ConnectionControl=true;
console.log('SSH Connected.');
}

wsconnection.on('message', function(message) {
if (message.type === 'utf8') {
console.log('Received Message: ' + message.utf8Data);
command=message.utf8Data;

//if(firstcom){
// conn.shell(onShell);
// firstcom=false;
//}else{
conn.exec(message.utf8Data,onShell);

//}

wsconnection.send(message.utf8Data);
}
else{
console.log('Invalid message');
}
});

wsconnection.on('close', function(reasonCode, description) {
console.log((new Date()) + ' Peer ' + wsconnection.remoteAddress + ' disconnected.');
});
});

最佳答案

如果您想要一个真正的交互式 shell,您应该使用 conn.shell() 而不是 conn.exec()conn.exec() 通常用于执行单行命令,因此它不会在 conn.exec() 调用之间保持“shell 状态”(例如工作目录等) .).

您还应该了解 SSH 服务器设置的可能限制,即每个连接允许多少同时 shell/exec 请求。我认为 OpenSSH 服务器上对此的默认限制是 10。

关于javascript - Nodejs ssh2 仅在一个终端运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24956159/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com