Gérer plusieurs ordinateurs distants via HTTP5
Anglais 中文
Des logiciels payants tels que TeamViewer vous aident à contrôler à distance plusieurs ordinateurs. WebPC complète des fonctions similaires et est entièrement gratuite et open source. Dans le même temps, WebPC utilise pleinement les navigateurs modernes et n'a besoin que d'utiliser le navigateur pour contrôler à distance votre ordinateur sans installer des programmes de contrôle supplémentaires.
WebPC a principalement les caractéristiques suivantes:



La popularité de l'équipement informatique et le développement rapide du réseau rendent le fonctionnement à distance des ordinateurs de plus en plus nécessaire et commun. SSH et RDP ne peuvent contrôler qu'un appareil avec une IP de réseau externe indépendante, et chacun a ses propres avantages et inconvénients. Les services qui fournissent la gestion à distance et le contrôle de plusieurs appareils tels que TeamViewer ne conviennent généralement pas aux utilisateurs non commerciaux. Et fournit généralement uniquement un bureau à distance, mais le shell à distance pour Linux et d'autres appareils est généralement plus utile et efficace. De plus, il est ennuyeux d'installer un programme de télécommande ennuyeux. J'ai donc trié les besoins ci-dessus et réalisé que toutes les fonctions des clients au navigateur sont ce projet WebPC.
Tout d'abord, un serveur est tenu de recevoir des demandes utilisateur et l'enregistrement de l'extrémité contrôlée. Nous appelons ce serveur le maître, et toutes les extrémités contrôlées sont des esclaves.
L'esclave s'inscrira auprès du maître et maintiendra un canal de réseau virtuel vers le maître. SALVE fournit des services GRPC au maître sur ce canal réseau virtuel pour prendre en charge diverses fonctions de télécommande.
Lorsque le maître reçoit une demande utilisateur, il trouve l'esclave enregistré et transmet la demande à l'esclave.
Pour Linux-AMD64 et Windows-AMD64, des programmes pré-compilés ont été fournis, veuillez télécharger et installer directement. Pour d'autres plates-formes, vous devez vous compiler par vous-même et vous référer à ce qui suit pour l'installation.
Téléchargez le dernier programme et dézip sur / opt / webpc / webpc
Copy /opt/webpc/webpc-master.service to /etc/systemd/system/webpc-master.service pour installer le service maître pour systemd
sudo cp /opt/webpc/webpc-master.service /etc/systemd/system/webpc-master.service
Si vous modifiez le répertoire d'installation, n'oubliez pas de modifier le chemin d'accès correspondant dans webpc-master.service
Créer un utilisateur WebPC
sudo useradd webpc -Mrs /sbin/nologin
Exécuter le service
sudo systemctl start webpc-master.service
Le nom d'utilisateur et le mot de passe aléatoires créés par le système peuvent être obtenus à partir de ./var/logs/master/webpc.log après la première exécution:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
Téléchargez le dernier programme et dézip sur / opt / webpc / webpc
Copy /opt/webpc/webpc-slave.service to /etc/systemd/system/webpc-slave.service pour installer le service d'esclaves pour systemd
sudo cp /opt/webpc/webpc-slave.service /etc/systemd/system/webpc-slave.service
Si vous modifiez le répertoire d'installation, n'oubliez pas de modifier le chemin d'accès correspondant dans WebPC-Slave.Service
Créer un utilisateur WebPC
sudo useradd webpc -Mrs /sbin/nologin
Exécuter le service
sudo systemctl start webpc-slave.service
Le nom d'utilisateur et le mot de passe aléatoires créés par le système peuvent être obtenus à partir de ./var/logs/master/webpc.log après la première exécution:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
http.libsonnet définit comment Master fournit des services de site Web
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 définit le maître lui-même comme un esclave pour s'inscrire à lui-même pour fournir une télécommande, et seuls les utilisateurs avec des autorisations racine ou serveur peuvent contrôler le maître
Connect.LibSonNet configure où le terminal contrôlé peut s'inscrire. Vous devez d'abord ajouter un périphérique de télécommande au service Web, et copier l'adresse enregistrée et remplir l'attribut URL de ce fichier
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 définit les fonctions que l'esclave fournira
{
//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 utilise le développement de Golang et GRPC, le front-end utilise le développement angulaire et doit être compilé séparément.
Installez le fil de nœud de nœud de développement nécessaire
Téléchargez le projet et passez le répertoire de travail sur webpc / View
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
Installez les dépendances du projet
yarn install
ou
npm install
Compiler le code frontal
../build.sh view
Installez l'environnement de développement nécessaire GCC GOLANG PROTO3 GRPC Protoc-Gen-Go Protoc-Gen-Grpc-Gateway Protoc-Gen-OpenAPIV2
Téléchargez le projet et passez le répertoire de travail sur webpc
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
Générer du code GRPC
./build.sh grpc
Intégrer le code frontal et les fichiers statiques dans le code Golang
./build.sh view -s
CODE DE GO
./build.sh go
Tous les utilisateurs et les terminaux contrôlés du WebPC existent sous le nœud d'un groupe d'arbres. Lorsque le groupe de l'utilisateur est le nœud d'ancêtre du groupe où appartient le terminal contrôlé, l'utilisateur peut contrôler le terminal contrôlé.
Les autorisations déterminent les opérations que l'utilisateur peut effectuer comprennent les définitions suivantes: