diff --git a/index.html b/index.html index dc6dd39..419ad66 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,7 @@ - + + @@ -8,50 +9,59 @@ - - + + +
-

ttyd - Share your terminal over the web

-

ttyd is a simple command-line tool for sharing terminal over the web, inspired by GoTTY.

-

screenshot

-

Features

- -

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 Build Status

+

ttyd is a simple command-line tool for sharing terminal over the web, inspired by GoTTY.

+

+ screenshot +

+

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.
  • +
- - \ No newline at end of file + + +