2022-01-09 08:56:43 -05:00
2022-01-09 08:56:43 -05:00
2022-01-07 11:53:05 -05:00
2022-01-07 09:00:44 -05:00
2022-01-05 12:38:52 -05:00
2022-01-07 19:55:38 -05:00
2022-01-09 08:56:43 -05:00
2022-01-07 09:04:10 -05:00
2022-01-09 08:56:43 -05:00

# Web Terminal
A (unsafe) technical demo to export a shell to web browser. 
It is just a simple demo in case some people are interested in 
how to setup xterm.js with websocket. 

This program is written in the go programming language, using the 
Gin web framework, gorilla/websocket, pty, and xterm.js!
The workflow is simple, the client will initiate a terminal 
window (xterm.js) and create a websocket with the server. On 
the server side, it serves the basic HTML/JS/CSS files and 
websockets (by shovling the data between pty and xterm).

___It is amazing what you can do with 270 lines of go code.___ 

To use the program, download/clone the code, and in the web_terminal
directory, run ```go build .```, this will create the binary called
web_terminal. Then, go to the tls directory and create a self-signed
certificate according to the instructions in README.

To run it, use ```./web_terminal cmd options_to_cmd```.
If no cmd and options are given, web_terminal will run bash by default.
You can run shells but also single programs, such as htop. For example, 
you can export the ssh shell, such as ```./web_terminal ssh 192.168.1.2 -l pi```.



The program
has been tested on Linux, WSL2, Raspberry Pi 3B (Debian), and MacOSX.

***known bug***

On MacOS X, running zsh with web_terminal will produce an extra % 
each time in Google Chrome. Consider it a ___feautre___, will not 
fix unless there is a pull request. Safari works fine though. 


**NOTE**

___Do NOT run this in an untrusted network. You will expose your 
shell to anyone that can access your network and Do NOT leave
the server running.___

Here is a screencast for sshing into Raspberry Pi running 
[pi-hole](https://pi-hole.net/) 
(```./web_terminal ssh 192.168.1.2 -l pi```,
web_terminal runs in a WSL2 VM on Windows):

<img src="https://github.com/syssecfsu/web_terminal/blob/master/extra/screencast.gif?raw=true" width="800px">
Description
Web-based interactive terminal emulator that allows users to easily record, share, and replay console sessions.
Readme LGPL-2.1 20 MiB
Languages
Go 54.9%
HTML 31.1%
JavaScript 11.3%
CSS 2.3%
Shell 0.4%