Я работаю с node.js, и я пытаюсь встроить консоль в веб-браузер для работы на удаленном сервере. Веб-приложение делает соединение, поэтому пользователю не нужно делать ssh [email protected]
, но только команды типа.ssh постоянные сессии с node.js
Я пробовал модуль node.js 'ssh2
и другие модули, которые используют ssh2. Но у меня всегда одна и та же проблема. Каждый раз, когда я выполняю команду программно, используя exec()
, сеанс ssh перезапускается. Я объясню это лучше с примера.
> ls
возвращает содержимое домашнего каталога, один из каталогов в домашней директории mydir
> cd mydir
> ls
возвращает содержимое домашнего каталога еще раз, потому что после того, как команда выполнила SSH сессия закрытая/перезапущен.
Любая библиотека node.js, которая может выполнять эту работу? или даже библиотека другой технологии, отличной от javascript?
Edit: Другой пример для уточнения, использовании модуля 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 каталога, потому что сеанс ssh сбрасывается после каждого exec
.
Это не так. Я использую ajax для вызова функции на сервере, которая ранее создала соединение shh и выполняла 'connection.exec ('cd mydir')'. Позже, другой запрос ajax вызывает функцию с другой командой; функция выполняет команду, выполняющую 'connection.exec ('ls')'. У меня нет проблем с выходом, а его получение и печать на нем прекрасны, но вывод не является ожидаемым (это не содержание mydir, а содержимое домашнего каталога), потому что сеанс ssh, кажется, сбрасывается после каждого exec :( –
Не сильно изменится. У вас все еще есть новый контекст с вашими вызовами exec. Вам нужно открыть на стороне сервера ssh-соединение и оставить его открытым (и тайм-аут простоя, если хотите). – CFrei
Что я пытаюсь объяснить, что это не работает.Если я открываю соединение на стороне сервера и программно, сразу после этого, я делаю 'connection.exec ('cd mydir')', и сразу я делаю 'connection.exec ('ls ') 'результат не ожидается, потому что соединение, кажется, сбрасывается после каждого exec.Я отредактирую свой вопрос, чтобы уточнить с помощью примера. –