通過HTTP5管理多台遠程計算機
英語中文
諸如TeamViewer之類的付費軟件可幫助您遠程控制多台計算機。 WebPC完成了類似的功能,並且是完全免費的和開源的。同時,WebPC充分利用現代瀏覽器,只需要使用瀏覽器即可遠程控制計算機,而無需安裝其他控製程序。
WebPC主要具有以下特徵:



計算機設備的普及和網絡的快速開發使計算機的遠程操作越來越必要和常見。 SSH和RDP只能控制具有獨立外部網絡IP的設備,並且每個設備都有其自己的優點和缺點。提供遠程管理和控制多種設備(例如TeamViewer)的服務通常不適合非商業用戶。通常僅提供遠程台式機,但用於Linux和其他設備的遠程外殼通常更有用和高效。此外,安裝煩人的遙控程序很煩人。因此,我解決了上述需求,並意識到瀏覽器的所有客戶功能都是該項目WebPC。
首先,需要服務器接收用戶請求和受控端的註冊。我們稱此服務器為主服務器,所有受控的末端都是奴隸。
從設備將向主人註冊,並將虛擬網絡渠道保留給主人。 Salve在此虛擬網絡渠道上為主服務提供了GRPC服務,以支持各種遙控功能。
當主收到用戶請求時,它找到了註冊的從屬,並將請求轉發到從屬上。
對於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中的相應路徑。服務。
創建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
copy/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設置受控終端可以註冊的位置。您需要先將遠程控制設備添加到Web服務,然後復制註冊的地址並填寫此文件的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,
},
],
}
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-GON-GON-GEN-GEN-GEN-GATEWAY PROTOC-GEN-OPENAPIV2
下載項目並將工作目錄切換到WebPC
git clone [email protected]:powerpuffpenguin/webpc.git && cd webpc
生成GRPC代碼
./build.sh grpc
將前端代碼和靜態文件嵌入Golang代碼
./build.sh view -s
編譯GO代碼
./build.sh go
WebPC中的所有用戶和受控終端都存在於樹組的節點下。當用戶組是受控終端所屬的組的祖先節點時,用戶可以控制受控終端。
權限確定用戶可以執行的操作包括以下定義: