grdpwasm - वेब-आधारित RDP क्लाइंट
(github.com/nakagami)- यह एक वेब-आधारित RDP क्लाइंट है, जो सिर्फ ब्राउज़र के जरिए Windows Remote Desktop से कनेक्ट हो सकता है और बिना किसी plugin के काम करता है
- यह ब्राउज़र के Go WebAssembly और सर्वर-साइड WebSocket-to-TCP प्रॉक्सी को अलग रखता है, ताकि ब्राउज़र जो RDP TCP कनेक्शन सीधे नहीं खोल सकता, उसे प्रॉक्सी संभाल सके
- कनेक्शन
Browser -> WebSocket -> proxy -> TCP -> RDP Serverफ्लो में चलता है, और कनेक्ट होने के बाद रिमोट स्क्रीन canvas पर दिखाई देती है तथा कीबोर्ड और माउस इनपुट आगे भेजे जाते हैं - इनपुट डिवाइस में RDP scan codes आधारित कीबोर्ड और मूवमेंट, क्लिक, व्हील सहित माउस सपोर्ट है, जबकि रिमोट ऑडियो RDPSND से प्राप्त होकर Web Audio API से प्ले होता है
- प्रॉक्सी संरचना सभी origin को अनुमति देती है, इसलिए इसे केवल विश्वसनीय नेटवर्क में चलाना चाहिए, या बाहरी एक्सपोज़र से पहले HTTPS/WSS और authentication layer साथ में लगानी चाहिए
प्रोजेक्ट अवलोकन
- यह ब्राउज़र में बिना किसी plugin के Windows Remote Desktop से कनेक्ट करने वाला वेब-आधारित RDP क्लाइंट है
- इसका इम्प्लीमेंटेशन Go WebAssembly और grdp के संयोजन से बना है, और इसमें ब्राउज़र रनटाइम भाग तथा प्रॉक्सी रिले भाग अलग संरचना में हैं
- क्योंकि ब्राउज़र सीधे raw TCP socket नहीं खोल सकता, इसलिए WebSocket कनेक्शन को RDP सर्वर के TCP पोर्ट से जोड़ने के लिए एक हल्का Go प्रॉक्सी भी जरूरी है
आर्किटेक्चर और काम करने का तरीका
- पूरा पथ
Browser (WASM) -> WebSocket -> proxy (Go) -> TCP -> RDP Serverक्रम में चलता है - ब्राउज़र में WASM binary चलती है, और प्रॉक्सी WebSocket-to-TCP bridge तथा static file server दोनों की भूमिका निभाता है
make allके आउटपुट ब्राउज़र में चलने वालाstatic/main.wasm, Go runtime support filestatic/wasm_exec.js, और प्रॉक्सी सर्वरproxy/proxyमें बंटे होते हैं- इस संरचना की वजह से ब्राउज़र वाला हिस्सा standard web technologies से कनेक्शन संभालता है, जबकि RDP सर्वर के साथ वास्तविक TCP संचार प्रॉक्सी करता है
उपयोग प्रवाह और यूज़र इंटरफ़ेस
- ब्राउज़र में
http://localhost:8080खोलकर कनेक्शन फ़ॉर्म में Host, Port, Domain, User, Password, Width, Height भरें और Connect दबाएँ, तो सत्र शुरू होता है - Port का डिफ़ॉल्ट मान
3389है, और लोकल अकाउंट इस्तेमाल करने पर Domain को खाली छोड़ा जा सकता है - कनेक्शन पूरा होने पर रिमोट डेस्कटॉप canvas पर दिखता है, और कीबोर्ड इनपुट लेने के लिए canvas पर क्लिक करना होता है
- Disconnect दबाने पर सत्र समाप्त हो जाता है
इनपुट डिवाइस और ऑडियो सपोर्ट
- सभी standard keyboard input RDP scan codes के जरिए रिमोट डेस्कटॉप तक भेजे जाते हैं
- माउस में movement, button click और scroll wheel तक का सपोर्ट है
- कीबोर्ड इवेंट भेजने के लिए ब्राउज़र टैब का focused होना जरूरी है, और अगर key input रुक जाए तो canvas क्षेत्र पर फिर से क्लिक करना चाहिए
- रिमोट ऑडियो RDPSND के जरिए stream होता है और ब्राउज़र में Web Audio API से प्ले किया जाता है
- ऑडियो फ़ॉर्मैट PCM 44100 Hz, stereo, 16-bit signed little-endian के रूप में निर्दिष्ट है
ऑपरेटिंग शर्तें और सुरक्षा संबंधी सावधानियाँ
- आवश्यकताओं में Go 1.24 या उससे ऊपर और एक सुलभ RDP सर्वर शामिल है; लक्ष्य सर्वर Windows या RDP-संगत होस्ट हो सकता है
- प्रॉक्सी सभी origin से कनेक्शन की अनुमति देता है, इसलिए इसे केवल विश्वसनीय नेटवर्क में चलाना चाहिए, या इंटरनेट पर एक्सपोज़ करने से पहले authentication layer जोड़नी चाहिए
- credentials ब्राउज़र से प्रॉक्सी तक WebSocket के जरिए भेजे जाते हैं, इसलिए अविश्वसनीय नेटवर्क में HTTPS/WSS का उपयोग जरूरी है
- README में TLS termination वाले reverse proxy के रूप में nginx या Caddy लगाने का तरीका भी दिया गया है
चलाने का तरीका और अतिरिक्त जानकारी
- इसे
make serveया./proxy/proxy -listen :8080 -static staticके रूप में चलाया जा सकता है - प्रॉक्सी विकल्पों में
-listenसे listen address और port, तथा-staticसे static file directory तय की जाती है - development targets में केवल WASM को दोबारा build करने के लिए
make wasm, केवल प्रॉक्सी को दोबारा build करने के लिएmake proxy,wasm_exec.jsअपडेट करने के लिएmake wasm_exec, और आउटपुट हटाने के लिएmake cleanशामिल हैं - लाइसेंस GPLv3 है, और साथ में grdp LICENSE का संदर्भ भी दिया गया है
2 टिप्पणियां
लेकिन सच में इसका फ़ायदा समझ नहीं आ रहा।
यह तो बस एक client है, इसलिए server side पर किसी भी requirement को enforce भी नहीं किया जा सकता।
और इसे केवल pure browser से access भी नहीं किया जा सकता।
Hacker News की राय
काफ़ी बढ़िया लग रहा है। अगर इसमें session recording और SSO authentication का सपोर्ट भी आ जाए, तो इसे सीधे RDP jump host की तरह इस्तेमाल किया जा सकता है
मैंने Azure Bastion के साथ कुछ ऐसा ही इस्तेमाल किया है: tenant में configured authentication method से Azure portal में लॉग इन करें, फिर browser से VM पर RDP कनेक्ट करें, और VM की तरफ़ local account से लॉग इन कर लें। files और clipboard handling भी काफ़ी अच्छी है, और browser के अंदर console session का भी सपोर्ट है
Windows/RDP वाले हिस्से को मैंने इस्तेमाल नहीं किया, इसलिए पता नहीं वहाँ कैसा है, लेकिन GCP का browser SSH अब तक देखी गई चीज़ों में सबसे अच्छी implementations में से एक था
Linux में भी कभी-कभी लगा कि xrdp दूसरे alternatives से बेहतर है
यह जिस बड़ी समस्या को हल करता है, उनमें से एक है VM/server के management interface का separation। सिर्फ़ इतना सुनिश्चित कर देना कि web server की management service, HTTP service वाले उसी IP/domain/interface पर न हो, security को काफ़ी बेहतर बना देता है
browser RDP में clipboard एक छिपा हुआ दुःस्वप्न है। wire protocol negotiation खुद तो ठीक चलता है, लेकिन browser side का Clipboard API permissions और user gesture requirements से बंधा होता है
read side पर ज़्यादातर browsers लगभग हर बार user confirmation मांगते हैं। इसलिए या तो page के अंदर एक अलग clipboard buffer बनाना पड़ता है, या फिर RDP के अंदर paste तो सहज हो जाता है लेकिन RDP से बाहर copy करते समय हर बार क्लिक झेलना पड़ता है
दोनों में से कोई भी तरीका वैसा व्यवहार नहीं देता जिसकी लोग web RDP client से उम्मीद करते हैं। इसे native mstsc के बराबर मानने से पहले Chrome और Firefox में इसका व्यवहार कैसे अलग है, यह ज़रूर देखना चाहिए
HP के Anyware / Teradici / PCoIP बंद करने के बाद काफ़ी लोग alternatives ढूँढ रहे हैं। ख़ासकर high-resolution multi-monitor, 60fps, high bit-depth playback, Wacom tablet support, और तीनों OS का सपोर्ट चाहिए
paid options में Parsec और DCV हैं, और open source प्रयासों को देखना अच्छा लगता है। rustdesk, kyber, teraguchi जैसे projects हैं, इसलिए community को high-performance open source options की सच में ज़रूरत लगती है
https://github.com/rustdesk/rustdesk
https://github.com/thedepartmentofexternalservices/teraguchi
https://kyber.tech/
दिलचस्प लग रहा है, लेकिन हैरानी है कि सबसे अहम feature का ज़िक्र नहीं है। clipboard sharing वास्तव में कितना अच्छा काम करता है, यह जानने की उत्सुकता है
clipboard sharing और shared drives के ज़रिए upload/download, ये FreeRDP features हैं इसलिए इन्हें अपेक्षाकृत सीधे इस्तेमाल किया जा सकता है
और session recording PAM environment में बिल्कुल अनिवार्य है
[1] https://adaptive.live
desktop scaling, multi-monitor support, file transfer, drive redirection, और peripheral redirection भी सब महत्वपूर्ण हैं
सोच रहा हूँ कि CyberArk PAM से मिली RDP file खोलते समय भी यह काम करेगा या नहीं
यह भी जानना है कि browser tab के अंदर Alt-Tab को RDP client intercept कर सकता है या नहीं
पहले Guacamole के browser RDP में यही सबसे बड़ी समस्या थी
तकनीकी रूप से दिलचस्प है, लेकिन लगभग हर platform पर native RDP client पहले से मौजूद है, इसलिए समझ नहीं आता कि इसकी ज़रूरत आख़िर क्यों है
https://guacamole.apache.org/