Administrar múltiples computadoras remotas a través de HTTP5
Inglés 中文
El software pagado como TeamViewer lo ayuda a controlar varias computadoras de forma remota. WebPC completa funciones similares y es completamente gratuito y de código abierto. Al mismo tiempo, WebPC hace un uso completo de los navegadores modernos y solo necesita usar el navegador para controlar su computadora de forma remota sin instalar programas de control adicionales.
WebPC tiene principalmente las siguientes características:



La popularidad de los equipos informáticos y el rápido desarrollo de la red hacen que la operación remota de las computadoras sea cada vez más necesaria y común. SSH y RDP solo pueden controlar un dispositivo con una IP de red externa independiente, y cada uno tiene sus propias ventajas y desventajas. Los servicios que proporcionan administración y control remotos de múltiples dispositivos, como TeamViewer, generalmente no son adecuados para usuarios no comerciales. Y generalmente solo proporciona un escritorio remoto pero una carcasa remota para Linux y otros dispositivos suele ser más útil y eficiente. Además, es molesto instalar un molesto programa de control remoto. Así que resolví las necesidades anteriores, y me di cuenta de que todas las funciones de los clientes al navegador es este proyecto webpc.
Primero, se requiere un servidor para recibir solicitudes de usuario y el registro del final controlado. Llamamos a este servidor el maestro, y todos los extremos controlados son esclavos.
El esclavo se registrará con el maestro y mantendrá un canal de red virtual al maestro. Salve proporciona servicios de GRPC al maestro en este canal de red virtual para admitir varias funciones de control remoto.
Cuando el maestro recibe una solicitud de usuario, encuentra el esclavo registrado y reenvía la solicitud al esclavo.
Para Linux-AMD64 y Windows-AMD64, se han proporcionado programas precompilados, descargue e instale directamente. Para otras plataformas, debe compilarlo usted mismo y consultar lo siguiente para la instalación.
Descargue el último programa y descomponga a/opt/WebPC/WebPC
Copy /opt/webpc/webpc-master.service a /etc/systemd/system/webpc-master.service para instalar el servicio maestro para el sistemaD
sudo cp /opt/webpc/webpc-master.service /etc/systemd/system/webpc-master.service
Si modifica el directorio de instalación, recuerde modificar la ruta correspondiente en WebPC-Master.service
Crear usuario de WebPC
sudo useradd webpc -Mrs /sbin/nologin
Ejecutar el servicio
sudo systemctl start webpc-master.service
El nombre de usuario y la contraseña aleatorios creados por el sistema se pueden obtener desde ./var/logs/master/webpc.log después de la primera ejecución:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
Descargue el último programa y descomponga a/opt/WebPC/WebPC
Copiar /opt/webpc/webpc-slave.service a /etc/systemd/system/webpc-slave.service para instalar el servicio de esclavos para Systemd
sudo cp /opt/webpc/webpc-slave.service /etc/systemd/system/webpc-slave.service
Si modifica el directorio de instalación, recuerde modificar la ruta correspondiente en WebPC-slave.service
Crear usuario de WebPC
sudo useradd webpc -Mrs /sbin/nologin
Ejecutar el servicio
sudo systemctl start webpc-slave.service
El nombre de usuario y la contraseña aleatorios creados por el sistema se pueden obtener desde ./var/logs/master/webpc.log después de la primera ejecución:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
http.libsonnet define cómo Master proporciona servicios de sitio 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 Define el maestro en sí mismo como esclavo para registrarse en sí mismo para proporcionar un control remoto, y solo los usuarios con permisos raíz o servidor pueden controlar el maestro
Connect.libsonnet se establece donde el terminal controlado puede registrarse. Debe agregar primero un dispositivo de control remoto al servicio web, y copiar la dirección registrada y completar el atributo de URL de este archivo
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 establece qué funciones proporcionará el esclavo
{
//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 utiliza el desarrollo de Golang y GRPC, Front-end utiliza el desarrollo angular y debe compilarse por separado.
Instale el hilo de inicio del nodo de entorno de desarrollo necesario
Descargue el proyecto y cambie el directorio de trabajo a WebPC/Ver
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
Instalar dependencias del proyecto
yarn install
o
npm install
Compilar el código front-end
../build.sh view
Instale el entorno de desarrollo necesario GCC Golang Proto3 GRPC Protococ-gen-go Protoc-Gen-Grpc-Gateway Protoc-Gen-Openapiv2
Descargue el proyecto y cambie el directorio de trabajo a WebPC
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
Generar código GRPC
./build.sh grpc
Incrustar código frontal y archivos estáticos en el código Golang
./build.sh view -s
Compilar código GO
./build.sh go
Todos los usuarios y terminales controlados en WebPC existen bajo el nodo de un grupo de árboles. Cuando el grupo del usuario es el nodo ancestro del grupo donde pertenece el terminal controlado, el usuario puede controlar el terminal controlado.
Los permisos determinan las operaciones que el usuario puede realizar incluyen las siguientes definiciones: