Я пытаюсь создать веб-страницу, где пользователь может аутентифицироваться на удаленном сервере через s sh с именем пользователя / паролем, а затем взаимодействовать с удаленным сервером.
Я не ищу для создания полностью интерактивного терминала: сервер приложений будет выполнять ограниченный набор команд на основе ввода пользователя, а затем передавать ответы обратно в браузер.
Разные пользователи должны взаимодействовать с разными s sh сеансами.
Мое приложение построено на Meteor 1.8.1, поэтому серверная часть работает под Node JS версии 9.16.0. Он развернут в Ubuntu с помощью Phusion Passenger.
Я просмотрел несколько пакетов, которые могут создать интерактивный сеанс s sh, но мне не хватает чего-то c о том, как их использовать.
Например https://github.com/mscdex/ssh2#start -an-interactive-shell-session
В примере показан следующий код:
var Client = require('ssh2').Client;
var conn = new Client();
conn.on('ready', function() {
console.log('Client :: ready');
conn.shell(function(err, stream) {
if (err) throw err;
stream.on('close', function() {
console.log('Stream :: close');
conn.end();
}).on('data', function(data) {
console.log('OUTPUT: ' + data);
});
stream.end('ls -l\nexit\n');
});
}).connect({
host: '192.168.100.100',
port: 22,
username: 'frylock',
privateKey: require('fs').readFileSync('/here/is/my/key')
});
В этом примере выполняется подключение к удаленному серверу, выполняется команда 'ls', а затем закрывает сеанс. Это не «интерактивный» в том смысле, который я ищу. Чего я не вижу, так это того, как сохранить сеанс и отправить новую команду?
Этот пример готового терминала выглядит излишним для моих нужд, и я не буду используя Docker.
В этом примере используется socket.io, и я не уверен, как это будет взаимодействовать с моим приложением Meteor? В настоящее время я использую методы и публикации Meteor для передачи информации между клиентом и сервером, поэтому я ожидал, что мне понадобится решение типа Meteor, использующее инфраструктуру Meteor?
child_process.spawn работает, но будет отправлять только одна команда, она не поддерживает сеанс.
Я знаю, что другие люди задавали похожие вопросы, но я не вижу решения для моего конкретного случая. Спасибо за любую помощь.