Управление несколькими удаленными компьютерами через HTTP5
Английский 中文
Оплачиваемое программное обеспечение, такое как TeamViewer, помогает вам удаленно управлять несколькими компьютерами. WebPC завершает аналогичные функции и является полностью бесплатным и открытым исходным кодом. В то же время WebPC в полной мере использует современные браузеры и необходимо использовать только браузер для удаленного управления компьютером без установки дополнительных программ управления.
WebPC в основном имеет следующие характеристики:



Популярность компьютерного оборудования и быстрое развитие сети делают удаленную работу компьютеров все более необходимой и более необходимой и обычной. SSH и RDP могут управлять устройством только с независимой внешней сетью IP, и каждый имеет свои собственные преимущества и недостатки. Услуги, которые обеспечивают удаленное управление и контроль нескольких устройств, таких как TeamViewer, обычно не подходят для некоммерческих пользователей. И обычно предоставляет только удаленный рабочий стол, но удаленная оболочка для Linux и другие устройства обычно более полезны и эффективны. Кроме того, раздражает устанавливать раздражающую программу дистанционного управления. Поэтому я разобрался с вышеуказанными потребностями и понял, что все функции клиентов в браузере - это проект WebPC.
Во -первых, сервер должен получать запросы пользователей и регистрацию контролируемого конца. Мы называем этот сервер мастером, и все контролируемые концы - это рабы.
Раб зарегистрируется с мастером и будет поддерживать виртуальный сетевой канал для мастера. Salve предоставляет Master Services Master на этом виртуальном сетевом канале для поддержки различных функций дистанционного управления.
Когда мастер получает запрос пользователя, он находит зарегистрированного раба и пересылает запрос в раб.
Для 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
Скопировать/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 определяет, как Master предоставляет услуги веб -сайта
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 устанавливает, где может зарегистрироваться контролируемый терминал. Сначала необходимо добавить устройство удаленного управления в веб -службу, скопировать зарегистрированный адрес и заполнить атрибут 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,
},
],
}
Back-end WebPC использует разработку Golang и GRPC, фронт-энд использует угловую разработку и должна быть скомпилирована отдельно.
Установите необходимую среду разработки узлы узлов
Загрузите проект и переключите рабочий каталог на WebPC/View
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
Установить зависимости проекта
yarn install
или
npm install
Скомпилируйте код переднего дня
../build.sh view
Установите необходимую среду разработки GCC Golang Proto3 GRPC Protoc-Gen-GE-GO-GEN-GEN-GRPC-GATEWAY PROTOC-GEN-OPENAPIV2
Загрузите проект и переключите рабочий каталог на WebPC
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
Генерировать код GRPC
./build.sh grpc
Встроенный фронт-код и статические файлы в код Golang
./build.sh view -s
Compile Go код
./build.sh go
Все пользователи и контролируемые терминалы в WebPC существуют под узлом группы деревьев. Когда группа пользователя является узлом предка группы, где принадлежит контролируемый терминал, пользователь может управлять контролируемым терминалом.
Разрешения определяют операции, которые может выполнить пользователь, включают следующие определения: