Подтвердить что ты не робот

Как создать веб-терминал с помощью xterm.js для ssh в систему в локальной сети

Я столкнулся с этой замечательной библиотекой xterm.js, которая также является базой для терминала Visual Studio. У меня очень общий вопрос.

Я хочу получить доступ к машине (ssh в машине) в локальной сети через веб-терминал (который находится вне сети, может быть на сервере aws). Я смог сделать это в локальной сети успешно, но я не мог прийти к выводу, чтобы сделать это из Интернета → локальной сети.

В качестве примера - An aws server running the application on ip 54.123.11.98 which has a GUI with a button to open terminal. I want to open terminal of a local machine which is in a local network somewhere behind some public ip on local ip 192.168.1.7.

Можно ли выполнить приведенный выше пример с помощью каких-то решений, где я могу использовать xterm.js, чтобы мне не приходилось строить веб-терминал? Каковы основные проблемы безопасности, которые я должен учитывать при раскрытии терминалов таким образом?

Я думал о том, чтобы использовать фиксированный промежуточный сервер между AWS и локальной сетью ip и использовать какой-то процесс обратного ssh-туннеля для этого, но я не уверен, что это правильный путь или может быть более простой/лучший способ добиться этого.

Я знаю цифровой океан, облако Google, все они делают это, но им приходится подключаться к компьютеру с открытым IP-адресом, в то время как у меня есть компьютер в локальной сети. Я действительно не хочу настраивать маршрутизатор для каких-либо настроек.

4b9b3361

Ответ 1

После нескольких исследований здесь работает код.

Следуя библиотекам, вам нужно понять, как это работает.

1) https://socket.io/

Эта библиотека используется для передачи пакета от клиента к серверу.

2) https://github.com/staltz/xstream

Эта библиотека используется для просмотра терминала.

3) https://github.com/mscdex/ssh2

Это главная библиотека. который используется для установления соединения с вашим удаленным сервером.

Шаг 1 : Установите эту 3 библиотеку в папку вашего проекта

Setp 2: Начните со стороны узла, создайте файл server.js для открытого сокета

Шаг 3 : Соединение клиентского сокета с сервером узла (оба находятся на локальном компьютере)

Хитрая логика заключается в том, как использовать socket и ssh2

на выходе из сокета вам нужно запустить команду ssh с помощью библиотеки ssh2. при ответе ssh2 (с сервера) вам нужно передать пакет сокета клиенту, чтобы он

Не писать больше вот пример кода

https://github.com/ankitvadariya/ssh-client-connection

Это как иметь следующие файлы & папки

server.js
package.json
src/
xtream/

сначала вам нужно настроить IP-адрес, пароль и файл сертификата вашего сервера на server.js. и просто нажмите на узел server.js

П.С.: Не забудьте запустить npm install

Дайте мне знать, если у вас есть какие-либо вопросы!

Ответ 2

После некоторых исследований я наткнулся на этот сервис: https://tmate.io/, который отлично справляется со своей задачей. Хотя, если вам нужен веб-терминал tmate, вы должны использовать их ssh-серверы в качестве обратного прокси-сервера, что в идеале меня не устраивало. Тем не менее, они предоставляют tmate-сервер, который может использоваться для размещения вашего собственного обратного прокси-сервера, но не имеет веб-интерфейса. Но для построения системы, в которой вам нужно получить доступ к клиенту через NAT через ssh в сети, ниже приведены шаги.

  • Установите и настройте tmate-сервер на каком-либо облачном компьютере.
  • Установите tmate на стороне клиента и настройте подключение к облачной машине.
  • Создайте приложение nodejs, используя xterm.js (легко благодаря связи на основе WebSocket), которое подключается к вашему серверу tmate и передает команды соответствующему клиенту. (Остерегайтесь вопросов безопасности, связанных с этим приложением, поскольку вы будете передавать команды Linux).
  • В зависимости от вашего варианта использования вам может понадобиться небольшая оболочка для клиента tmate на стороне клиента, чтобы запустить/остановить его автоматически или с помощью некоторого пользовательского интерфейса/ручного действия.

Примечание: я также написал небольшую оболочку на стороне клиента для запуска/остановки и передачи необходимой информации на сервер API (записанный в nodejs), который затем передает информацию другому API, который соединяет браузер с соответствующим сеансом клиента, Так как мы написали это приложение, оно включало аутентификацию, а также ограничения команд того, что может быть запущено на терминале. Вы можете настроить его много.