Kelola beberapa komputer jarak jauh melalui HTTP5
Bahasa Inggris 中文
Perangkat lunak berbayar seperti TeamViewer membantu Anda mengontrol beberapa komputer dari jarak jauh. WebPC menyelesaikan fungsi yang sama dan sepenuhnya gratis dan open source. Pada saat yang sama, WebPC memanfaatkan sepenuhnya browser modern dan hanya perlu menggunakan browser untuk mengontrol komputer Anda dari jarak jauh tanpa menginstal program kontrol tambahan.
Webpc terutama memiliki karakteristik berikut:



Popularitas peralatan komputer dan pengembangan jaringan yang cepat membuat operasi jarak jauh lebih penting dan lebih penting. SSH dan RDP hanya dapat mengontrol perangkat dengan IP jaringan eksternal independen, dan masing -masing memiliki kelebihan dan kekurangannya sendiri. Layanan yang menyediakan manajemen jarak jauh dan kontrol beberapa perangkat seperti TeamViewer biasanya tidak cocok untuk pengguna non-komersial. Dan biasanya hanya menyediakan desktop jarak jauh tetapi shell jarak jauh untuk Linux dan perangkat lain biasanya lebih berguna dan efisien. Selain itu, sangat mengganggu untuk menginstal program remote control yang mengganggu. Jadi saya memilah kebutuhan di atas, dan menyadari semua fungsi pelanggan ke browser adalah webpc proyek ini.
Pertama, server diperlukan untuk menerima permintaan pengguna dan pendaftaran ujung yang dikendalikan. Kami menyebut server ini master, dan semua tujuan yang terkontrol adalah budak.
Slave akan mendaftarkan diri dengan master dan mempertahankan saluran jaringan virtual ke master. Salve menyediakan layanan GRPC kepada master di saluran jaringan virtual ini untuk mendukung berbagai fungsi remote control.
Ketika master menerima permintaan pengguna, ia menemukan budak terdaftar dan meneruskan permintaan ke budak.
Untuk Linux-AMD64 dan Windows-AMD64, program yang telah dikompilasi telah disediakan, silakan unduh dan instal secara langsung. Untuk platform lain, Anda perlu mengkompilasi sendiri, dan merujuk pada yang berikut untuk instalasi.
Unduh program terbaru dan unzip ke/opt/webpc/webpc
Salin /opt/webpc/webpc-master.service ke /etc/systemd/system/webpc-master.service untuk menginstal layanan master untuk systemd
sudo cp /opt/webpc/webpc-master.service /etc/systemd/system/webpc-master.service
Jika Anda memodifikasi direktori instalasi, ingatlah untuk memodifikasi jalur yang sesuai di webpc-master.service
Buat Pengguna WebPC
sudo useradd webpc -Mrs /sbin/nologin
Jalankan layanan
sudo systemctl start webpc-master.service
Nama pengguna dan kata sandi acak yang dibuat oleh sistem dapat diperoleh dari ./var/logs/master/webpc.log setelah menjalankan pertama:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
Unduh program terbaru dan unzip ke/opt/webpc/webpc
Salin /opt/webpc/webpc-slave.service ke /etc/systemd/system/webpc-slave.service untuk menginstal layanan budak untuk systemd
sudo cp /opt/webpc/webpc-slave.service /etc/systemd/system/webpc-slave.service
Jika Anda memodifikasi direktori instalasi, ingatlah untuk memodifikasi jalur yang sesuai di webpc-slave.service
Buat Pengguna WebPC
sudo useradd webpc -Mrs /sbin/nologin
Jalankan layanan
sudo systemctl start webpc-slave.service
Nama pengguna dan kata sandi acak yang dibuat oleh sistem dapat diperoleh dari ./var/logs/master/webpc.log setelah menjalankan pertama:
$ cat ./var/logs/master/webpc.log
...
{"level":"info","ts":1630285898.3816726,"msg":"init user","user":"king","password":"08ab28ebb369dc15cc2c95dc972348ee"}
...
http.libsonnet mendefinisikan bagaimana master menyediakan layanan situs 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 mendefinisikan master itu sendiri sebagai budak untuk mendaftar sendiri untuk memberikan kendali jarak jauh, dan hanya pengguna dengan izin root atau server yang dapat mengontrol master
Connect.libsonnet mengatur di mana terminal yang dikendalikan dapat mendaftar sendiri. Anda perlu menambahkan perangkat kontrol jarak jauh ke layanan web terlebih dahulu, dan menyalin alamat terdaftar dan mengisi atribut URL dari file ini
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 mengatur fungsi apa yang akan disediakan oleh budak
{
//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 menggunakan pengembangan Golang dan GRPC, front-end menggunakan pengembangan sudut, dan perlu dikompilasi secara terpisah.
Pasang benang node node lingkungan pengembangan yang diperlukan
Unduh proyek dan beralih direktori kerja ke WebPC/tampilan
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc/view
Instal dependensi proyek
yarn install
atau
npm install
Kompilasi kode front-end
../build.sh view
Pasang lingkungan pengembangan yang diperlukan GCC Golang Proto3 GRPC Protoc-GO-GO Protoc-Gen-GRPC-Gateway Protoc-Gen-Openapiv2
Unduh proyek dan beralih direktori kerja ke WebPC
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
Hasilkan Kode GRPC
./build.sh grpc
Embed kode front-end dan file statis ke dalam kode golang
./build.sh view -s
Kode Kode GO
./build.sh go
Semua pengguna dan terminal yang dikendalikan di WebPC ada di bawah simpul grup pohon. Ketika grup pengguna adalah node leluhur grup tempat terminal yang dikendalikan, pengguna dapat mengontrol terminal yang dikendalikan.
Izin menentukan operasi yang dapat dilakukan pengguna mencakup definisi berikut: