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.




Install on macOS

Install with homebrew:

brew install ttyd

Install on Linux

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

LEDE 17.01.0 and later:

opkg install ttyd

If the install command fails, you can compile it yourself.


Command-line Options

ttyd is a tool for sharing terminal over the web

    ttyd [options] <command> [<arguments...>]


    -p, --port              Port to listen (default: 7681, use `0` for random port)
    -i, --interface         Network interface to bind (eg: eth0), or UNIX domain socket path (eg: /var/run/ttyd.sock)
    -c, --credential        Credential for Basic Authentication (format: username:password)
    -u, --uid               User id to run with
    -g, --gid               Group id to run with
    -s, --signal            Signal to send to the command when exit it (default: 1, SIGHUP)
    -r, --reconnect         Time to reconnect for the client in seconds (default: 10)
    -R, --readonly          Do not allow clients to write to the TTY
    -t, --client-option     Send option to client (format: key=value), repeat to add more options
    -O, --check-origin      Do not allow websocket connection from different origin
    -m, --max-clients       Maximum clients to support (default: 0, no limit)
    -o, --once              Accept only one client and exit on disconnection
    -B, --browser           Open terminal with the default system browser
    -I, --index             Custom index.html path
    -S, --ssl               Enable SSL
    -C, --ssl-cert          SSL certificate file path
    -K, --ssl-key           SSL key file path
    -A, --ssl-ca            SSL CA file path for client certificate verification
    -d, --debug             Set log level (default: 7)
    -v, --version           Print the version and exit
    -h, --help              Print this text and exit

Visit to get more information and report bugs.

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:

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: