web-dev-qa-db-ja.com

xterm.jsを使用してローカルネットワーク上のシステムにSSH接続するWebベースのターミナルを作成する方法

Visual Studio Codeのターミナルのベースでもあるこの素晴らしいライブラリ xterm.js に出会いました。非常に一般的な質問があります。

ローカルネットワーク上のマシン(sshからマシンへ)にWebベースのターミナル(ネットワーク外にあり、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を使用できるWebベースの端末を構築する必要がないようなソリューションを使用して実現できますか?この方法で端末を公開する際に留意すべき主なセキュリティ上の懸念は何ですか?

私はAWSとローカルネットワークIPの間に固定中間サーバーを使用し、これを行うために何らかのリバースSSHトンネルプロセスを使用することに沿って考えていましたが、これが正しい方法であるか、より簡単/より良い方法があるかはわかりませんこれを達成するために。

私はデジタルオーシャン、グーグルクラウドを知っています、彼らはすべてこれをしますが、ローカルネットワークにマシンがある間、彼らはパブリックIPを持つコンピューターに接続する必要があります。ルーターを構成してどんな種類のセットアップもしたくないのです。

24
Ankit Kulkarni

ここでいくつかの研究を行った後、作業コードがあります。

ライブラリに従って、その動作を理解する必要があります。

1) https://socket.io/

このライブラリは、クライアントからサーバーへのパッケージの送信に使用されます。

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

このライブラリはターミナルビューに使用されます。

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

これがメインライブラリです。リモートサーバーとの接続の確立に使用されます。

ステップ1:プロジェクトフォルダーにこの3ライブラリをインストールします

Setp 2:ノード側から開始して、オープンソケット用のserver.jsファイルを作成します

ステップ3:ノードサーバーへのクライアントソケットの接続(両方ともローカルマシンにあります)

トリッキーなロジックは、単にソケットとssh2を使用する方法です

ソケットの発行時に、ssh2ライブラリを使用してsshコマンドをトリガーする必要があります。 (サーバーからの)ssh2の応答で、それであるクライアントにソケットパッケージを送信する必要があります

サンプルコードはここに書かないでください

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

これには、次のファイルとフォルダーがあります

server.js
package.json
src/
xtream/

まず、server.jsでサーバーIP、ユーザー、パスワード、または証明書ファイルを構成する必要があります。そして、単にノードserver.jsをヒット

追伸:npm install

質問があれば教えてください!

14
Ankit vadariya

いくつかの調査の後、私はこのサービスに出くわしました: https://tmate.io/ これは完璧に仕事をします。ただし、tmateのWebベースの端末が必要な場合は、そのsshサーバーをリバースプロキシとして使用する必要がありますが、これは理想的ではありません。ただし、独自のリバースプロキシサーバーをホストするために使用できるtmate-serverを提供しますが、Web UIはありません。ただし、Web上のsshを介してNATを介してクライアントにアクセスする必要があるシステムを構築するには、以下の手順を実行します。

  • クラウドマシンに tmate-server をインストールして設定します。
  • クライアント側に tmate をインストールし、クラウドマシンに接続するように構成します。
  • Tmate-serverに接続し、それぞれのクライアントにコマンドを渡すxterm.js(WebSocketベースの通信のため簡単)を使用してnodejsアプリケーションを作成します。 (Linuxコマンドを渡すため、このアプリケーションを公開する際のセキュリティ問題に注意してください)。
  • ユースケースによっては、クライアント側でtmateクライアントの周りに小さなラッパーが必要になる場合があります。これは、自動的に、またはUI /手動アクションを介して開始/停止します。

注:クライアントサイドでも小さなラッパーを作成して、必要な情報を開始/停止し、APIサーバー(nodejsで記述)に渡してから、ブラウザーをそれぞれのクライアントセッションに接続する別のAPIに渡します。このアプリケーションを作成したので、認証と端末で実行できるコマンドの制限が含まれていました。たくさんカスタマイズできます。

0
Ankit Kulkarni