{"id":13435613,"url":"https://github.com/zhaojh329/rtty","last_synced_at":"2025-05-14T17:06:25.128Z","repository":{"id":37752489,"uuid":"92715023","full_name":"zhaojh329/rtty","owner":"zhaojh329","description":"🐛 Access your terminal from anywhere via the web.","archived":false,"fork":false,"pushed_at":"2025-05-14T10:41:14.000Z","size":6609,"stargazers_count":3776,"open_issues_count":17,"forks_count":511,"subscribers_count":100,"default_branch":"master","last_synced_at":"2025-05-14T11:48:10.465Z","etag":null,"topics":["http-proxy","nat","proxy","remote-console","remote-control","remote-debug","remote-shell","tty","webshell","webssh"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhaojh329.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":[]}},"created_at":"2017-05-29T07:04:37.000Z","updated_at":"2025-05-14T10:39:54.000Z","dependencies_parsed_at":"2023-02-10T01:16:38.421Z","dependency_job_id":"dc4c6d97-f617-4d46-8661-3f9182196dd8","html_url":"https://github.com/zhaojh329/rtty","commit_stats":null,"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhaojh329%2Frtty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhaojh329%2Frtty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhaojh329%2Frtty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhaojh329%2Frtty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhaojh329","download_url":"https://codeload.github.com/zhaojh329/rtty/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254190396,"owners_count":22029632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["http-proxy","nat","proxy","remote-console","remote-control","remote-debug","remote-shell","tty","webshell","webssh"],"created_at":"2024-07-31T03:00:37.437Z","updated_at":"2025-05-14T17:06:25.120Z","avatar_url":"https://github.com/zhaojh329.png","language":"C","funding_links":[],"categories":["C","proxy"],"sub_categories":[],"readme":"# rtty([中文](/README_ZH.md))\n\n**This project is officially supported by [GL.iNet](https://github.com/gl-inet).**\n\n[1]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=plastic\n[2]: /LICENSE\n[3]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=plastic\n[4]: https://github.com/zhaojh329/rtty/pulls\n[5]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=plastic\n[6]: https://github.com/zhaojh329/rtty/issues/new\n[7]: https://img.shields.io/badge/release-8.1.4-blue.svg?style=plastic\n[8]: https://github.com/zhaojh329/rtty/releases\n[9]: https://github.com/zhaojh329/rtty/workflows/build/badge.svg\n\n[![license][1]][2]\n[![PRs Welcome][3]][4]\n[![Issue Welcome][5]][6]\n[![Release Version][7]][8]\n![Build Status][9]\n![visitors](https://visitor-badge.laobi.icu/badge?page_id=zhaojh329.rtty)\n\n[Xterm.js]: https://github.com/xtermjs/xterm.js\n[libev]: http://software.schmorp.de/pkg/libev.html\n[openssl]: https://github.com/openssl/openssl\n[mbedtls(polarssl)]: https://github.com/ARMmbed/mbedtls\n[CyaSSl(wolfssl)]: https://github.com/wolfSSL/wolfssl\n[vue]: https://github.com/vuejs/vue\n[server]: https://github.com/zhaojh329/rttys\n\n```mermaid\nflowchart TB\ns[rttys with public IP address]\nu1[\"User(Web Browser)\"] --\u003e s\nu2[\"User(Web Browser)\"] --\u003e s\nu3[\"User(Web Browser)\"] --\u003e s\ns --\u003e c1[\"rtty(Linux Device)\"]\ns --\u003e c2[\"rtty(Linux Device)\"]\ns --\u003e c3[\"rtty(Linux Device)\"]\n```\n\n![](/doc/terminal.gif)\n![](/doc/file.gif)\n![](/doc/web.gif)\n\nIt is composed of a client and a [server]. The client is written in pure C. The [server] is written in go language\nand the front-end is written in [Vue].\n\nYou can access your device's terminal from anywhere via the web. Distinguish your different device by device ID.\n\nrtty is very suitable for remote maintenance your or your company's thousands of Linux devices deployed around\nthe world.\n\n## Features\n* The client is writen in C language, very small, suitable for embedded Linux\n  - No SSL: rtty(32K) + libev(56K)\n  - Support SSL: + libmbedtls(88K) + libmbedcrypto(241K) + libmbedx509(48k)\n* Execute command remotely in a batch of devices \n* SSL support: openssl, mbedtls, CyaSSl(wolfssl)\n* mTLS\n* Very convenient to upload and download files\n* Access different devices based on device ID\n* Support HTTP Proxy - Access your device's Web\n* Fully-featured terminal based on [Xterm.js]\n* Simple to deployment and easy to use\n\n## Who's using rtty\n- [GL.iNet](https://www.gl-inet.com/)\n- [Yunlianxin Technology](http://www.iyunlink.com/)\n- [One IOT World](https://www.oneiotworld.com/)\n- [bitswrt Communication Technology](http://bitswrt.com/)\n\n## Dependencies of the Client side\n* [libev] - A full-featured and high-performance event loop\n* [mbedtls(polarssl)] or [CyaSSl(wolfssl)] or [openssl] - If you want to support SSL\n\n## [Deploying the server side](https://github.com/zhaojh329/rttys)\n\n## How to install rtty\n### For Linux distribution\n\nInstall Dependencies\n\n    sudo apt install -y libev-dev libssl-dev      # Ubuntu, Debian\n    sudo pacman -S --noconfirm libev openssl      # ArchLinux\n    sudo yum install -y libev-devel openssl-devel # Centos\n\nClone the code of rtty\n\n    git clone --recursive https://github.com/zhaojh329/rtty.git\n\nBuild\n\n    cd rtty \u0026\u0026 mkdir build \u0026\u0026 cd build\n    cmake .. \u0026\u0026 make install\n\n### For Buildroot\nSelect rtty in menuconfig and compile it\n\n    Target packages  ---\u003e\n        Shell and utilities  ---\u003e\n            [*] rtty\n\n### [For OpenWRT](/OPENWRT.md)\n\n### [For Other Embedded Linux Platform](/CROSS_COMPILE.md)\n\n## Command-line Options\n\n    Usage: rtty [option]\n        -I, --id=string          Set an ID for the device(Maximum 63 bytes, valid\n                                 character:letter, number, underline and short line)\n        -h, --host=string        Server's host or ipaddr(Default is localhost)\n        -p, --port=number        Server port(Default is 5912)\n        -d, --description=string Add a description to the device(Maximum 126 bytes)\n        -a                       Auto reconnect to the server\n        -s                       SSL on\n        -C, --cacert             CA certificate to verify peer against\n        -x, --insecure           Allow insecure server connections when using SSL\n        -c, --cert               Certificate file to use\"\n        -k, --key                Private key file to use\"\n        -D                       Run in the background\n        -t, --token=string       Authorization token\n        -f username              Skip a second login authentication. See man login(1) about the details\n        -R                       Receive file\n        -S file                  Send file\n        -v, --verbose            verbose\n        -V, --version            Show version\n        --help                   Show usage\n\n## How to run rtty\nReplace the following parameters with your own parameters\n\n    sudo rtty -I 'My-device-ID' -h 'your-server' -p 5912 -a -v -d 'My Device Description'\n\nIf your [rttys](https://github.com/zhaojh329/rttys) is configured with mTLS enabled (device key and certificate required),\nadd the following parameters(Replace the following with valid paths to your own)\n\n    -k /etc/ssl/private/abc.pem -c /etc/ssl/certs/abc.pem\n\nYou can generate them e.g. via openssl tool\n    openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp521r1 -keyout /tmp/key.pem -out /tmp/cert.pem -days 18262 -nodes -subj \"/C=CZ/O=Acme Inc./OU=ACME/CN=ACME-DEV-123\"\n\nIf your rttys is configured with a token, add the following parameter(Replace the following token with your own)\n\n    -t 34762d07637276694b938d23f10d7164\n\n## Usage\nUse your web browser to access your server: `http://your-server-host:5913`, then click the connection button\n\n### connect devices with no web login required(you need to configure the device white list on the server)\nhttp://your-server-host:5913/connect/devid1\n\nhttp://your-server-host:5913/connect/devid2\n\n### Transfer file\nTransfer file from local to remote device\n\n\trtty -R\n\nTransfer file from remote device to the local\n\n\trtty -S test.txt\n\n### [Execute command remotely](/COMMAND.md)\n\n## Contributing\nIf you would like to help making [rtty](https://github.com/zhaojh329/rtty) better,\nsee the [CONTRIBUTING.md](https://github.com/zhaojh329/rtty/blob/master/CONTRIBUTING.md) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhaojh329%2Frtty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhaojh329%2Frtty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhaojh329%2Frtty/lists"}