2 awesome open source apps to share your terminal over the web

Want to share your terminal over the web for demo, learning or collaboration purpose? Try these two applications to share your terminal as a web application.



Please note that accepting input from remote clients is dangerous for most commands. When you need interaction with the TTY for some reasons, consider starting following tools with tmux or GNU Screen and run your command on it. Use following tools with trusted parties or inside VM. Let us see how to install and use gotty and ttyd on a Unix-like system.

ADVERTISEMENTS



1. gotty

GoTTY is a simple command line tool that turns your CLI tools into web applications. It is written in go programming language.

Installation

You can install gotty on macOS using the brew command:

$ brew install yudai/gotty/gotty

Sample outputs:

Updating Homebrew... == > Tapping yudai/gotty Cloning into '/usr/local/Homebrew/Library/Taps/yudai/homebrew-gotty'... remote: Counting objects: 5 , done. remote: Compressing objects: 100 % ( 5 / 5 ) , done. remote: Total 5 ( delta 1 ) , reused 2 ( delta 0 ) , pack-reused 0 Unpacking objects: 100 % ( 5 / 5 ) , done. Tapped 1 formula ( 30 files, 22.7KB ) == > Installing gotty from yudai/gotty = => Downloading https://github.com/yudai/gotty/releases/download/v1.0.1/gotty_darwin_amd64.tar.gz == > Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/ 40808571 /c401bd34-7bd9-11e7- 8 ######################################################################## 100.0 % == > Caveats GoTTY! == > Summary ? /usr/local/Cellar/gotty/v1.0.1: 3 files, 8.2MB, built in 1 minute Updating Homebrew... ==> Tapping yudai/gotty Cloning into '/usr/local/Homebrew/Library/Taps/yudai/homebrew-gotty'... remote: Counting objects: 5, done. remote: Compressing objects: 100% (5/5), done. remote: Total 5 (delta 1), reused 2 (delta 0), pack-reused 0 Unpacking objects: 100% (5/5), done. Tapped 1 formula (30 files, 22.7KB) ==> Installing gotty from yudai/gotty ==> Downloading https://github.com/yudai/gotty/releases/download/v1.0.1/gotty_darwin_amd64.tar.gz ==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/40808571/c401bd34-7bd9-11e7-8 ######################################################################## 100.0% ==> Caveats GoTTY! ==> Summary ? /usr/local/Cellar/gotty/v1.0.1: 3 files, 8.2MB, built in 1 minute

Another option for Linux or Unix like system is to type the following command if you have a go language dev setup installed:

$ go get github.com/yudai/gotty

Usage

The syntax is:

$ gotty command

$ gotty htop

Sample outputs:

2017/09/23 22:31:19 Server is starting with command: htop 2017/09/23 22:31:19 URL: http://127.0.0.1:8080/ 2017/09/23 22:31:19 URL: http://[::1]:8080/ 2017/09/23 22:31:19 URL: http://[fe80::1]:8080/ 2017/09/23 22:31:19 URL: http://[fe80::1c3a:3312:311b:cca4]:8080/ 2017/09/23 22:31:19 URL: http://192.168.225.106:8080/ 2017/09/23 22:31:19 URL: http://[fe80::6c1b:58ff:fe8a:4e6e]:8080/ 2017/09/23 22:31:19 URL: http://[fe80::526a:bad6:960f:369f]:8080/ 2017/09/23 22:31:19 URL: http://10.8.0.2:8080/

Fire a browser and type the url:

http://127.0.0.1:8080/

OR from another computer in your LAN/VLAN:

http://192.168.225.106:8080/

Sample outputs:



2. ttyd

For more info and documentation see gotty home page.

ttyd is a simple command-line tool for sharing terminal over the web, inspired by GoTTY. It is built on top of Libwebsockets with C for speed. Works with macOS, Linux, FreeBSD, OpenWrt/LEDE, and MS-Windows oses.

Installation

If you are using macOS, run the following brew command:

$ brew install ttyd

Sample outputs:

Viveks-MacBook-Pro:~ veryv$ brew install ttyd Updating Homebrew... == > Auto-updated Homebrew! Updated 1 tap ( homebrew/core ) . No changes to formulae. == > Installing dependencies for ttyd: json-c, libwebsockets = => Installing ttyd dependency: json-c == > Downloading https://homebrew.bintray.com/bottles/json-c-0.12.1.sierra.bottle.tar.gz ######################################################################## 100.0 % == > Pouring json-c-0.12.1.sierra.bottle.tar.gz ? /usr/local/Cellar/json-c/0.12.1: 27 files, 156.2KB = => Installing ttyd dependency: libwebsockets == > Downloading https://homebrew.bintray.com/bottles/libwebsockets-2.2.1.sierra.bottle.tar.gz ######################################################################## 100.0 % == > Pouring libwebsockets-2.2.1.sierra.bottle.tar.gz ? /usr/local/Cellar/libwebsockets/2.2.1: 29 files, 4.2MB = => Installing ttyd == > Downloading https://homebrew.bintray.com/bottles/ttyd-1.3.3.sierra.bottle.tar.gz ######################################################################## 100.0 % == > Pouring ttyd-1.3.3.sierra.bottle.tar.gz ? /usr/local/Cellar/ttyd/1.3.3: 6 files, 282.6KB Viveks-MacBook-Pro:~ veryv$ brew install ttyd Updating Homebrew... ==> Auto-updated Homebrew! Updated 1 tap (homebrew/core). No changes to formulae. ==> Installing dependencies for ttyd: json-c, libwebsockets ==> Installing ttyd dependency: json-c ==> Downloading https://homebrew.bintray.com/bottles/json-c-0.12.1.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring json-c-0.12.1.sierra.bottle.tar.gz ? /usr/local/Cellar/json-c/0.12.1: 27 files, 156.2KB ==> Installing ttyd dependency: libwebsockets ==> Downloading https://homebrew.bintray.com/bottles/libwebsockets-2.2.1.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring libwebsockets-2.2.1.sierra.bottle.tar.gz ? /usr/local/Cellar/libwebsockets/2.2.1: 29 files, 4.2MB ==> Installing ttyd ==> Downloading https://homebrew.bintray.com/bottles/ttyd-1.3.3.sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring ttyd-1.3.3.sierra.bottle.tar.gz ? /usr/local/Cellar/ttyd/1.3.3: 6 files, 282.6KB

If you are using a Debian/Ubuntu Linux, run:

$ sudo apt-get install -y software-properties-common

$ sudo add-apt-repository ppa:tsl0922/ttyd-dev

$ sudo apt-get update

$ sudo apt-get install ttyd

Usage

The syntax is:

$ ttyd command

$ ttyd bash

Sample outputs:

[ 2017/09/23 22:57:32:9322 ] NOTICE: ttyd 1.3.3 ( libwebsockets 2.2.0 ) [ 2017/09/23 22:57:32:9323 ] NOTICE: tty configuration: [ 2017/09/23 22:57:32:9323 ] NOTICE: start command: bash [ 2017/09/23 22:57:32:9323 ] NOTICE: reconnect timeout: 10s [ 2017/09/23 22:57:32:9323 ] NOTICE: close signal: SIGHUP ( 1 ) [ 2017/09/23 22:57:32:9323 ] NOTICE: Initial logging level 7 [ 2017/09/23 22:57:32:9323 ] NOTICE: Libwebsockets version: 2.2.0 brew@Sierra.local- [ 2017/09/23 22:57:32:9323 ] NOTICE: IPV6 not compiled in [ 2017/09/23 22:57:32:9323 ] NOTICE: libev support not compiled in [ 2017/09/23 22:57:32:9323 ] NOTICE: libuv support not compiled in [ 2017/09/23 22:57:32:9324 ] NOTICE: Threads: 1 each 256 fds [ 2017/09/23 22:57:32:9325 ] NOTICE: mem: platform fd map: 2048 bytes [ 2017/09/23 22:57:32:9325 ] NOTICE: Compiled with OpenSSL support [ 2017/09/23 22:57:32:9325 ] NOTICE: SSL disabled: no LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT [ 2017/09/23 22:57:32:9326 ] NOTICE: Creating Vhost 'default' port 7681 , 2 protocols, IPv6 off [ 2017/09/23 22:57:32:9337 ] NOTICE: Listening on port 7681 [ 2017/09/23 22:57:32:9338 ] NOTICE: mem: per-conn: 568 bytes + protocol rx buf [ 2017/09/23 22:57:32:9339 ] NOTICE: canonical_hostname = Viveks-MacBook-Pro.local [2017/09/23 22:57:32:9322] NOTICE: ttyd 1.3.3 (libwebsockets 2.2.0) [2017/09/23 22:57:32:9323] NOTICE: tty configuration: [2017/09/23 22:57:32:9323] NOTICE: start command: bash [2017/09/23 22:57:32:9323] NOTICE: reconnect timeout: 10s [2017/09/23 22:57:32:9323] NOTICE: close signal: SIGHUP (1) [2017/09/23 22:57:32:9323] NOTICE: Initial logging level 7 [2017/09/23 22:57:32:9323] NOTICE: Libwebsockets version: 2.2.0 brew@Sierra.local- [2017/09/23 22:57:32:9323] NOTICE: IPV6 not compiled in [2017/09/23 22:57:32:9323] NOTICE: libev support not compiled in [2017/09/23 22:57:32:9323] NOTICE: libuv support not compiled in [2017/09/23 22:57:32:9324] NOTICE: Threads: 1 each 256 fds [2017/09/23 22:57:32:9325] NOTICE: mem: platform fd map: 2048 bytes [2017/09/23 22:57:32:9325] NOTICE: Compiled with OpenSSL support [2017/09/23 22:57:32:9325] NOTICE: SSL disabled: no LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT [2017/09/23 22:57:32:9326] NOTICE: Creating Vhost 'default' port 7681, 2 protocols, IPv6 off [2017/09/23 22:57:32:9337] NOTICE: Listening on port 7681 [2017/09/23 22:57:32:9338] NOTICE: mem: per-conn: 568 bytes + protocol rx buf [2017/09/23 22:57:32:9339] NOTICE: canonical_hostname = Viveks-MacBook-Pro.local

Fire a web browser and type url:

127.0.0.1:7681

Sample session:



ADVERTISEMENTS



For more info and docs see project home page