ttyd - Share your terminal over the web
-ttyd is a simple command-line tool for sharing terminal over the web, inspired by GoTTY.
-
Features
--
-
- Built on top of Libwebsockets with C for speed -
- Fully-featured terminal based on Xterm.js with CJK (Chinese, Japanese, Korean) and IME support -
- SSL support based on OpenSSL -
- Run any custom command with options -
- Basic authentication support and many other custom options -
- Cross platform: macOS, Linux, FreeBSD, OpenWrt/LEDE -
Installation
-Install on macOS
-Install with homebrew:
-brew install ttyd
- Install on Linux
-Ubuntu 16.04 as example:
-sudo apt-get install cmake g++ pkg-config git vim-common libwebsockets-dev libjson-c-dev libssl-dev
+ ttyd - Share your terminal over the web 
+ ttyd is a simple command-line tool for sharing terminal over the web, inspired by GoTTY.
+
+ Features
+
+ - Built on top of Libwebsockets with C for speed
+ - Fully-featured terminal based on Xterm.js with CJK (Chinese, Japanese, Korean) and IME support
+ - SSL support based on OpenSSL
+ - Run any custom command with options
+ - Basic authentication support and many other custom options
+ - Cross platform: macOS, Linux, FreeBSD, OpenWrt/LEDE
+
+ Installation
+ Install on macOS
+ Install with homebrew:
+ brew install ttyd
+ Install on Linux
+ Ubuntu 16.04 as example:
+ sudo apt-get install cmake g++ pkg-config git vim-common libwebsockets-dev libjson-c-dev libssl-dev
git clone https://github.com/tsl0922/ttyd.git
cd ttyd && mkdir build && cd build
cmake ..
make && make install
-
- NOTE: You may need to compile libwebsockets from source for ubuntu versions old than 16.04, since they have outdated libwebsockets-dev package (Issue #6).
-
- Install on OpenWrt/LEDE
- opkg install ttyd
-
- NOTE: This may only works for LEDE snapshots currently, if the install command fails, compile it yourself.
-
- Usage
- Command-line Options
- ttyd is a tool for sharing terminal over the web
+
+ NOTE: You may need to compile libwebsockets from source for ubuntu versions old than 16.04, since they have outdated libwebsockets-dev package (Issue #6).
+
+ Install on Windows
+ ttyd can be built with MSYS2 on windows, The build instructions is here.
+
+ NOTE: Native windows console programs may not work correctly due to pty incompatibility issues.
+
As a workaround, you can use winpty as a wrapper to invoke the windows program, eg: ttyd winpty cmd.
+
+ Install on OpenWrt/LEDE
+ opkg install ttyd
+
+ NOTE: This may only works for LEDE snapshots currently, if the install command fails, compile it yourself.
+
+ Usage
+ Command-line Options
+ ttyd is a tool for sharing terminal over the web
USAGE:
ttyd [options] <command> [<arguments...>]
VERSION:
- 1.2.0
+ 1.2.2
OPTIONS:
--port, -p Port to listen (default: 7681, use `0` for random port)
@@ -65,37 +75,56 @@ OPTIONS:
--client-option, -t Send option to client (format: key=value), repeat to add more options
--check-origin, -O Do not allow websocket connection from different origin
--once, -o Accept only one client and exit on disconnection
- --ssl, -S Enable ssl
- --ssl-cert, -C Ssl certificate file path
- --ssl-key, -K Ssl key file path
- --ssl-ca, -A Ssl ca file path
+ --ssl, -S Enable SSL
+ --ssl-cert, -C SSL certificate file path
+ --ssl-key, -K SSL key file path
+ --ssl-ca, -A SSL CA file path for client certificate verification
--debug, -d Set log level (0-9, default: 7)
--version, -v Print the version and exit
--help, -h Print this text and exit
-
- Example Usage
- ttyd starts web server at port 7681 by default, you can use the -p option to change it, the command will be started with arguments as options. For example, run:
- ttyd -p 8080 bash -x
- Then open http://localhost:8080 with a broswer, you will get a bash shell with debug mode enabled.
- More Examples:
-
- - If you want to login with your system accounts on the web broswer, run
ttyd login.
- - You can even run a none shell command like vim, try:
ttyd vim, the web broswer will show you a vim editor.
- - Sharing single process with multiple clients:
ttyd tmux new -A -s ttyd vim, run tmux new -A -s ttyd to connect to the tmux session from terminal.
-
- Docker and ttyd
- Docker containers are jailed environments which are more secure, this is useful for protecting the host system, you may use ttyd with docker like this:
-
- - Sharing single docker container with multiple clients:
docker run -it --rm -p 7681:7681 tsl0922/ttyd.
- - Creating new docker container for each client:
ttyd docker run -it --rm ubuntu.
-
- Credits
-
- - GoTTY: ttyd is a port of GoTTY to
C language with many improvements.
- - Libwebsockets: is used to build the websocket server.
- - Xterm.js: is used to run the terminal emulator on the web, hterm is used previously.
-
+
+ Example Usage
+ ttyd starts web server at port 7681 by default, you can use the -p option to change it, the command will be started with arguments as options. For example, run:
+ ttyd -p 8080 bash -x
+ Then open http://localhost:8080 with a broswer, you will get a bash shell with debug mode enabled.
+ More Examples:
+
+ - If you want to login with your system accounts on the web broswer, run
ttyd login.
+ - You can even run a none shell command like vim, try:
ttyd vim, the web broswer will show you a vim editor.
+ - Sharing single process with multiple clients:
ttyd tmux new -A -s ttyd vim, run tmux new -A -s ttyd to connect to the tmux session from terminal.
+
+ SSL how-to
+ Generate SSL CA and self signed server/client certificates:
+ # CA certificate (FQDN must be different from server/client)
+openssl genrsa -out ca.key 4096
+openssl req -new -x509 -days 365 -key ca.key -out ca.crt
+# server certificate
+openssl req -newkey rsa:2048 -nodes -keyout server.key -out server.csr
+openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
+# client certificate (the p12/pem format may be useful for some clients)
+openssl req -newkey rsa:2048 -nodes -keyout client.key -out client.csr
+openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt
+openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
+openssl pkcs12 -in client.p12 -out client.pem -clcerts
+ Then start ttyd:
+ ttyd --ssl --ssl-cert server.crt --ssl-key server.key --ssl-ca ca.crt bash
+ You may want to test the client certificate verification with curl:
+ curl --insecure --cert client.p12[:password] -v https://localhost:7681
+ If you don't want to enable client certificate verification, remove the --ssl-ca option.
+ Docker and ttyd
+ Docker containers are jailed environments which are more secure, this is useful for protecting the host system, you may use ttyd with docker like this:
+
+ - Sharing single docker container with multiple clients:
docker run -it --rm -p 7681:7681 tsl0922/ttyd.
+ - Creating new docker container for each client:
ttyd docker run -it --rm ubuntu.
+
+ Credits
+
+ - GoTTY: ttyd is a port of GoTTY to
C language with many improvements.
+ - Libwebsockets: is used to build the websocket server.
+ - Xterm.js: is used to run the terminal emulator on the web, hterm is used previously.
+
