HTTP5を介して複数のリモートコンピューターを管理します
英語中文
TeamViewerなどの有料ソフトウェアは、複数のコンピューターをリモートで制御するのに役立ちます。 WebPCは同様の機能を完了し、完全に無料でオープンソースです。同時に、WebPCは最新のブラウザを最大限に活用しており、追加の制御プログラムをインストールせずにコンピューターをリモートで制御するためにブラウザを使用するだけです。
WebPCには主に次の特性があります。



コンピューター機器の人気とネットワークの急速な開発により、コンピューターのリモート操作により、ますます必要かつ一般的になります。 SSHとRDPは、独立した外部ネットワークIPを持つデバイスのみを制御でき、それぞれに独自の利点と短所があります。 TeamViewerなどの複数のデバイスのリモート管理と制御を提供するサービスは、通常、非営利ユーザーには適していません。通常、リモートデスクトップのみを提供しますが、Linuxやその他のデバイス用のリモートシェルは通常、より便利で効率的です。さらに、迷惑なリモートコントロールプログラムをインストールするのは面倒です。そこで、上記のニーズを整理し、ブラウザのすべての顧客機能がこのプロジェクトWebPCであることに気付きました。
まず、ユーザー要求と制御された端の登録を受信するためにサーバーが必要です。このサーバーをマスターと呼び、制御されたすべての端は奴隷です。
スレーブはマスターに登録し、仮想ネットワークチャネルをマスターに維持します。 Salveは、この仮想ネットワークチャネルのマスターにGRPCサービスを提供して、さまざまなリモートコントロール機能をサポートしています。
マスターがユーザーリクエストを受信すると、登録された奴隷を見つけて、リクエストをスレーブに転送します。
Linux-AMD64およびWindows-AMD64の場合、事前にコンパイルされたプログラムが提供されています。直接ダウンロードしてインストールしてください。他のプラットフォームについては、自分でコンパイルし、インストールについては以下を参照する必要があります。
最新のプログラムをダウンロードして、/opt/webpc/webpcに解凍します
copy /opt/webpc/webpc-master.service to /etc/systemd/system/webpc-master.service systemdのマスターサービスをインストールする
sudo cp /opt/webpc/webpc-master.service /etc/systemd/system/webpc-master.service
インストールディレクトリを変更する場合は、WebPC-Master.Serviceの対応するパスを変更することを忘れないでください
WebPCユーザーを作成します
sudo useradd webpc -Mrs /sbin/nologin
サービスを実行します
sudo systemctl start webpc-master.service
システムによって作成されたランダムユーザー名とパスワードは、最初の実行後に./var/logs/master/webpc.logから取得できます。
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
最新のプログラムをダウンロードして、/opt/webpc/webpcに解凍します
copy /opt/webpc/webpc-slave.service to /etc/systemd/system/webpc-slave.service systemdのスレーブサービスをインストールする
sudo cp /opt/webpc/webpc-slave.service /etc/systemd/system/webpc-slave.service
インストールディレクトリを変更する場合は、webpc-slave.serviceの対応するパスを変更することを忘れないでください
WebPCユーザーを作成します
sudo useradd webpc -Mrs /sbin/nologin
サービスを実行します
sudo systemctl start webpc-slave.service
システムによって作成されたランダムユーザー名とパスワードは、最初の実行後に./var/logs/master/webpc.logから取得できます。
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
http.libsonnetは、マスターがウェブサイトサービスを提供する方法を定義します
local def = import "def.libsonnet";
local size = def.Size;
local duration = def.Duration;
{
// http addr
Addr: ':9000',
// if not empty use https
CertFile: '',
KeyFile: '',
// enable swagger-ui on /document/
Swagger: true,
// grpc server option
Option: {
WriteBufferSize: 32*size.KB,
ReadBufferSize: 32*size.KB,
InitialWindowSize: 0*size.KB, // < 64k ignored
InitialConnWindowSize: 0*size.KB, // < 64k ignored
MaxRecvMsgSize: 0, // <1 6mb
MaxSendMsgSize: 0, // <1 math.MaxInt32
MaxConcurrentStreams: 0,
ConnectionTimeout: 120 * duration.Second,
Keepalive: {
MaxConnectionIdle: 0,
MaxConnectionAge: 0,
MaxConnectionAgeGrace: 0,
Time: 0,
Timeout: 0,
},
},
}
System.libsonnetは、マスター自体をリモートコントロールを提供するために自分自身に登録する奴隷として定義し、ルートまたはサーバーの権限を持つユーザーのみがマスターを制御できます
connect.libsonnetは、制御された端子がそれ自体を登録できる場所をセットアップします。最初にリモートコントロールデバイスをWebサービスに追加し、登録されたアドレスをコピーして、このファイルのURL属性を入力する必要があります
local def = import "def.libsonnet";
local size = def.Size;
local duration = def.Duration;
{
// http addr
URL: 'ws://127.0.0.1:9000/api/v1/dialer/64048031f73a11eba3890242ac120064',
// if true allow insecure server connections when using SSL
// Insecure: true,
// grpc server option
Option: {
WriteBufferSize: 32*size.KB,
ReadBufferSize: 32*size.KB,
InitialWindowSize: 0*size.KB, // < 64k ignored
InitialConnWindowSize: 0*size.KB, // < 64k ignored
MaxRecvMsgSize: 0, // <1 6mb
MaxSendMsgSize: 0, // <1 math.MaxInt32
MaxConcurrentStreams: 0,
ConnectionTimeout: 120 * duration.Second,
Keepalive: {
MaxConnectionIdle: 0,
MaxConnectionAge: 0,
MaxConnectionAgeGrace: 0,
Time: 0,
Timeout: 0,
},
},
}
System.libsonnetスレーブが提供する機能を設定します
{
//Shell : "shell-linux", // if empty, linux default value shell-linux.sh
//Shell : "shell-windows.bat", // if empty, windows default value shell-windows.bat
// vnc server address
VNC: "127.0.0.1:5900",
// mount path to web
Mount: [
{
// web display name
Name: "s_movie",
// local filesystem path
Root: "/home/dev/movie",
// Set the directory to be readable. Users with read/write permissions can read files
Read: true,
// Set the directory to be writable. Users with write permission can write files
// If Write is true, Read will be forcibly set to true
Write: true,
// Set as a shared directory to allow anyone to read the file
// If Shared is true, Read will be forcibly set to true
Shared: true,
},
{
Name: "s_home",
Root: "/home/dev",
Write: true,
Read: true,
Shared: false,
},
{
Name: "s_root",
Root: "/",
Write: false,
Read: true,
Shared: false,
},
{
Name: "s_media",
Root: "/media/dev/",
Write: false,
Read: true,
Shared: false,
},
],
}
WebPCバックエンドはGolangとGRPC開発を使用し、フロントエンドは角度開発を使用し、個別にコンパイルする必要があります。
必要な開発環境ノードタイプスクリプトYARNをインストールします
プロジェクトをダウンロードして、ワーキングディレクトリをWebPC/ビューに切り替えます
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
プロジェクトの依存関係をインストールします
yarn install
または
npm install
フロントエンドコードをコンパイルします
../build.sh view
必要な開発環境をインストールするGCC Golang Proto3 GRPC Protoc-Gen-Go Protoc-Gen-Gateway Protoc-Gen-Openapiv2
プロジェクトをダウンロードして、ワーキングディレクトリをWebPCに切り替えます
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
GRPCコードを生成します
./build.sh grpc
フロントエンドコードと静的ファイルをGolangコードに埋め込みました
./build.sh view -s
GOコードをコンパイルします
./build.sh go
WebPCのすべてのユーザーと制御された端子は、ツリーグループのノードの下に存在します。ユーザーのグループが、制御された端子が属するグループの祖先ノードである場合、ユーザーは制御された端子を制御できます。
権限は、ユーザーが実行できる操作を決定します。