Verwalten Sie mehrere Remote -Computer über HTTP5
Englisch 中文
Bezahlte Software wie TeamViewer hilft Ihnen, mehrere Computer aus der Ferne zu kontrollieren. WebPC vervollständigt ähnliche Funktionen und ist vollständig kostenlos und Open Source. Gleichzeitig nutzt WebPC moderne Browser voll aus und muss nur den Browser verwenden, um Ihren Computer remote zu steuern, ohne zusätzliche Steuerungsprogramme zu installieren.
WebPC hat hauptsächlich die folgenden Eigenschaften:



Die Popularität von Computerausrüstung und die schnelle Entwicklung des Netzwerks machen den Fernbetrieb von Computern immer notwendiger und gemeinsamer. SSH und RDP können nur ein Gerät mit einem unabhängigen externen Netzwerk -IP steuern, und jeder hat seine eigenen Vor- und Nachteile. Dienste, die das Fernmanagement und die Kontrolle mehrerer Geräte wie TeamViewer bieten, sind normalerweise nicht für nichtkommerzielle Benutzer geeignet. Und bietet normalerweise nur Remote -Desktop, aber Remote -Shell für Linux und andere Geräte ist normalerweise nützlicher und effizienter. Darüber hinaus ist es ärgerlich, ein nerviges Fernbedienungsprogramm zu installieren. Daher habe ich die oben genannten Bedürfnisse geklärt und festgestellt, dass alle Kundenfunktionen im Browser dieses Projekt WebPC sind.
Zunächst ist ein Server erforderlich, um Benutzeranfragen und die Registrierung des kontrollierten Endes zu empfangen. Wir nennen diesen Server den Master und alle kontrollierten Enden sind Sklaven.
Der Sklave registriert sich beim Master und verwaltet einen virtuellen Netzwerkkanal für den Master. Salve bietet dem Master auf diesem virtuellen Netzwerk -Kanal GRPC -Dienste an, um verschiedene Fernbedienungsfunktionen zu unterstützen.
Wenn der Master eine Benutzeranforderung erhält, findet er den registrierten Sklaven und leitet die Anfrage an den Sklaven weiter.
Für Linux-AMD64 und Windows-AMD64 wurden vorbereitete Programme zur Verfügung gestellt, bitte laden Sie sie direkt herunter und installieren Sie sie direkt. Für andere Plattformen müssen Sie selbst kompilieren und sich für die Installation auf Folgendes verweisen.
Laden Sie das neueste Programm herunter und entpacken Sie es in/opt/webpc/webpc
Copy /opt/webpc/webpc-master.service to /etc/systemd/system/webpc-master.service, um den Master-Dienst für Systemd zu installieren
sudo cp /opt/webpc/webpc-master.service /etc/systemd/system/webpc-master.service
Wenn Sie das Installationsverzeichnis ändern, sollten Sie den entsprechenden Pfad in webpc-master.service ändern
Erstellen Sie den WebPC -Benutzer
sudo useradd webpc -Mrs /sbin/nologin
Den Service ausführen
sudo systemctl start webpc-master.service
Der vom System erstellte zufällige Benutzername und Kennwort kann nach dem ersten Lauf von ./var/logs/master/webpc.log erhalten werden:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
Laden Sie das neueste Programm herunter und entpacken Sie es in/opt/webpc/webpc
Copy /opt/webpc/webpc-slave.service to /etc/systemd/system/webpc-slave.service zur Installation des Slave-Dienstes für Systemd
sudo cp /opt/webpc/webpc-slave.service /etc/systemd/system/webpc-slave.service
Wenn Sie das Installationsverzeichnis ändern, können Sie den entsprechenden Pfad in webpc-slave.service ändern
Erstellen Sie den WebPC -Benutzer
sudo useradd webpc -Mrs /sbin/nologin
Den Service ausführen
sudo systemctl start webpc-slave.service
Der vom System erstellte zufällige Benutzername und Kennwort kann nach dem ersten Lauf von ./var/logs/master/webpc.log erhalten werden:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
http.libsonnet definiert, wie Master Website -Dienste anbietet
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 definiert den Master selbst als Sklave, der sich für sich selbst registriert, um eine Fernbedienung zu erhalten, und nur Benutzer mit Root- oder Serverberechtigungen können den Master steuern
Connect.libsonNet legt fest, dass sich das kontrollierte Terminal selbst registrieren kann. Sie müssen zuerst dem Webdienst ein Fernbedienungsgerät hinzufügen, die registrierte Adresse kopieren und das URL -Attribut dieser Datei eingeben
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 setzt, welche Funktionen der Slave bereitstellen wird
{
//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 Back-End verwendet Golang und GRPC-Entwicklung, Front-End verwendet Winkelentwicklung und muss separat zusammengestellt werden.
Installieren Sie die erforderliche Entwicklungsumgebung Knoten -Typscript -Garn
Laden Sie das Projekt herunter und wechseln Sie das Arbeitsverzeichnis auf WebPC/View
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
Projektabhängigkeiten installieren
yarn install
oder
npm install
Kompilieren Sie den Front-End-Code
../build.sh view
Installieren Sie die notwendige Entwicklungsumgebung GCC Golang Proto3 GRPC-Protoc-Gen-Go-Protoc-GEN-GENC-GATEWAY-Protoc-Gen-Openapiv2
Laden Sie das Projekt herunter und wechseln Sie das Arbeitsverzeichnis auf WebPC
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
Generieren Sie den GRPC -Code
./build.sh grpc
Einbetten Sie Front-End-Code und statische Dateien in den Golang-Code ein
./build.sh view -s
GO -Code kompilieren
./build.sh go
Alle Benutzer und kontrollierten Terminals im WebPC existieren unter dem Knoten einer Baumgruppe. Wenn die Gruppe des Benutzers der Vorfahrknoten der Gruppe ist, an dem das kontrollierte Terminal gehört, kann der Benutzer das kontrollierte Terminal steuern.
Die Berechtigungen bestimmen die Vorgänge, die der Benutzer ausführen kann, die folgenden Definitionen enthalten: