Built a cloud-like remote shell platform inspired by EC2 / Azure VM, enabling real-time command execution on remote provider machines via backend.
This project implements a distributed remote shell access system where provider machines expose isolated shell environments that can be accessed securely from a web browser.
A provider agent connects to a Spring Boot backend, allowing users to interact with the provider’s Linux or Docker-based shell in real time through the browser.
-
Implemented a provider–agent architecture where remote machines register and maintain persistent connections with a Spring Boot server.
-
Enabled real-time browser-based shell access by streaming terminal input/output between:
Browser ⇄ Spring Boot Server ⇄ Provider Agent
-
Implemented bidirectional, low-latency communication using WebSockets.
-
Integrated Docker-based shell execution to provide isolated and disposable execution environments.
-
Designed a session-based command streaming pipeline to handle interactive terminal sessions (stdin/stdout/stderr).
-
Ensured the backend acts as an intermediary, avoiding direct browser-to-provider exposure.
-
Backend: Java, Spring Boot, WebSockets, REST APIs.
-
Provider Agent: Python, pty, websockets.
-
Execution Environment: Docker, Linux Shell.
-
A provider machine runs the provider.py agent.
-
The agent establishes a persistent WebSocket connection with the Spring Boot backend.
-
Users access the shell through the browser UI, which communicates with the backend.
-
Commands are forwarded to the provider agent, executed inside a docker container. Command output is streamed back to the browser in real time.
Provider Machine: Ensure Docker is installed on the provider machine for isolated execution. Also run below to install necessary packages.
pip install pty websockets
Run python provider.py and it will connect to springboot backend.
-
If you dont have docker, you can provide your provider machines bash(it will give access to entire provider machine). Just change
["docker", "run", "-it", "--rm", "alpine", "sh"]to["bash"]. -
Also provider docker runs alpine, if you want you can run ubuntu or any other os.