Gerenciar vários computadores remotos via http5
Inglês 中文
Software pago, como o TeamViewer, ajuda a controlar vários computadores remotamente. O WebPC conclui funções semelhantes e é totalmente gratuito e de código aberto. Ao mesmo tempo, o WebPC faz total uso de navegadores modernos e só precisa usar o navegador para controlar remotamente seu computador sem instalar programas de controle adicionais.
WebPC tem principalmente as seguintes características:



A popularidade dos equipamentos de informática e o rápido desenvolvimento da rede tornam a operação remota de computadores cada vez mais necessários e comuns. O SSH e o RDP só podem controlar um dispositivo com um IP de rede externa independente, e cada um tem suas próprias vantagens e desvantagens. Os serviços que fornecem gerenciamento e controle remotos de vários dispositivos, como o TeamViewer, geralmente não são adequados para usuários não comerciais. E geralmente fornece apenas desktop remoto, mas shell remoto para Linux e outros dispositivos geralmente é mais útil e eficiente. Além disso, é irritante instalar um programa de controle remoto irritante. Então, resolvi as necessidades acima e percebi que todas as funções do cliente no navegador são este projeto WebPC.
Primeiro, é necessário um servidor para receber solicitações de usuário e o registro da extremidade controlada. Chamamos esse servidor de mestre e todas as extremidades controladas são escravos.
O escravo se registrará no mestre e manterá um canal de rede virtual para o mestre. A Salve fornece serviços GRPC ao mestre neste canal de rede virtual para suportar várias funções de controle remoto.
Quando o mestre recebe uma solicitação do usuário, ele encontra o escravo registrado e encaminha a solicitação ao escravo.
Para Linux-AMD64 e Windows-AMD64, os programas pré-compilados foram fornecidos, faça o download e instale diretamente. Para outras plataformas, você precisa compilar sozinho e consulte o seguinte para instalação.
Baixe o programa mais recente e descompacte para/opt/webpc/webpc
Copy /opt/webpc/webpc-master.service para /etc/systemd/system/webpc-master.service para instalar o serviço mestre para systemddd
sudo cp /opt/webpc/webpc-master.service /etc/systemd/system/webpc-master.service
Se você modificar o diretório de instalação, lembre-se de modificar o caminho correspondente em webpc-master.service
Crie usuário do WebPC
sudo useradd webpc -Mrs /sbin/nologin
Execute o serviço
sudo systemctl start webpc-master.service
O nome de usuário e a senha aleatórios criados pelo sistema podem ser obtidos em ./var/logs/master/webpc.log após a primeira execução:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
Baixe o programa mais recente e descompacte para/opt/webpc/webpc
Copy /opt/webpc/webpc-slave.service para /etc/systemd/system/webpc-slave.service para instalar o serviço de escravos para Systemd
sudo cp /opt/webpc/webpc-slave.service /etc/systemd/system/webpc-slave.service
Se você modificar o diretório de instalação, lembre-se de modificar o caminho correspondente em webpc-slave.service
Crie usuário do WebPC
sudo useradd webpc -Mrs /sbin/nologin
Execute o serviço
sudo systemctl start webpc-slave.service
O nome de usuário e a senha aleatórios criados pelo sistema podem ser obtidos em ./var/logs/master/webpc.log após a primeira execução:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
http.libsonnet define como o Master fornece serviços de site
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 o próprio mestre como um escravo para se registrar para fornecer controle remoto, e apenas os usuários com permissões de raiz ou servidor podem controlar o mestre
Connect.libsonnet configura onde o terminal controlado pode se registrar. Você precisa adicionar um dispositivo de controle remoto ao serviço da web primeiro, copiar o endereço registrado e preencher o atributo URL deste arquivo
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 Define quais funções o escravo fornecerá
{
//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,
},
],
}
O back-end do WebPC usa o desenvolvimento de Golang e GRPC, o front-end usa o desenvolvimento angular e precisa ser compilado separadamente.
Instale o fio do nó de ambiente de desenvolvimento necessário, fios de descrição
Faça o download do projeto e mude o diretório de trabalho para webpc/view
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
Instalar dependências do projeto
yarn install
ou
npm install
Compilar o código front-end
../build.sh view
Instale o ambiente de desenvolvimento necessário GCC Golang Proto3 Grpc Protoc-Gen-Go Protoc-Gen-Gen-Gateway Protoc-Gen-Openapiv2
Faça o download do projeto e mude o diretório de trabalho para Webpc
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
Gerar código GRPC
./build.sh grpc
Incorporar código front-end e arquivos estáticos no código de Golang
./build.sh view -s
Compilar código GO
./build.sh go
Todos os usuários e terminais controlados no WebPC existem sob o nó de um grupo de árvores. Quando o grupo do usuário é o nó ancestral do grupo em que o terminal controlado pertence, o usuário pode controlar o terminal controlado.
As permissões determinam as operações que o usuário pode executar incluem as seguintes definições: