{"id":13441321,"url":"https://github.com/MisterTea/EternalTerminal","last_synced_at":"2025-03-20T11:38:16.905Z","repository":{"id":13351540,"uuid":"74223162","full_name":"MisterTea/EternalTerminal","owner":"MisterTea","description":"Re-Connectable secure remote shell","archived":false,"fork":false,"pushed_at":"2024-10-24T21:53:49.000Z","size":45981,"stargazers_count":3014,"open_issues_count":86,"forks_count":172,"subscribers_count":34,"default_branch":"master","last_synced_at":"2024-10-26T09:39:43.479Z","etag":null,"topics":["mosh","remote-shell","ssh","terminal","tmux"],"latest_commit_sha":null,"homepage":"https://mistertea.github.io/EternalTerminal/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MisterTea.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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},"funding":{"github":"MisterTea"}},"created_at":"2016-11-19T17:15:18.000Z","updated_at":"2024-10-25T15:46:47.000Z","dependencies_parsed_at":"2023-02-15T08:45:54.785Z","dependency_job_id":"181abb6d-8460-4ed5-9ebc-6af09ce6cd64","html_url":"https://github.com/MisterTea/EternalTerminal","commit_stats":{"total_commits":895,"total_committers":75,"mean_commits":"11.933333333333334","dds":0.4737430167597766,"last_synced_commit":"2f8dfdd350b8dd01fbd521dd7cda6adaf1e41b82"},"previous_names":[],"tags_count":81,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterTea%2FEternalTerminal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterTea%2FEternalTerminal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterTea%2FEternalTerminal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MisterTea%2FEternalTerminal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MisterTea","download_url":"https://codeload.github.com/MisterTea/EternalTerminal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221759951,"owners_count":16876323,"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":["mosh","remote-shell","ssh","terminal","tmux"],"created_at":"2024-07-31T03:01:32.513Z","updated_at":"2025-03-20T11:38:16.891Z","avatar_url":"https://github.com/MisterTea.png","language":"C++","readme":"# Eternal Terminal\n\nEternal Terminal is a remote shell that automatically reconnects without interrupting the session.\n\nWebsite: \u003chttps://mistertea.github.io/EternalTerminal/\u003e.\n\n## Integration tests\n\nCircle: [![CircleCI](https://circleci.com/gh/MisterTea/EternalTerminal/tree/master.svg?style=svg)](https://circleci.com/gh/MisterTea/EternalTerminal/tree/master)\n\nLinux: ![Linux CI](https://github.com/MisterTea/EternalTerminal/workflows/Linux%20CI/badge.svg?branch=master)\n\n## Packaging status\n\n[![Packaging\nstatus](https://repology.org/badge/vertical-allrepos/eternalterminal.svg)](https://repology.org/project/eternalterminal/versions)\n\n## Installing\n\n### macOS\n\nThe easiest way to install is using Homebrew:\n\n```bash\nbrew install MisterTea/et/et\n```\n\nIf the install fails on including csignal, see https://github.com/MisterTea/EternalTerminal/issues/662#issuecomment-2408889829\n\nThen if you want a daemon to launch `etserver` on every boot:\n\nOn m1 (Apple Silicon) Macs:\n\n```bash\nsudo sed 's:/usr/local/bin/etserver:/opt/homebrew/bin/etserver:g' ../init/launchd/homebrew.mxcl.et.plist | sudo tee /Library/LaunchDaemons/homebrew.mxcl.et.plist\nsudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.et.plist\n```\n\nOn x86 Macs:\n\n```bash\nsudo cp ../init/launchd/homebrew.mxcl.et.plist /Library/LaunchDaemons/homebrew.mxcl.et.plist\nsudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.et.plist\n```\n\nAlternatively, a package is available in MacPorts:\n\n```bash\nsudo port install et\n```\n\n### Ubuntu\n\nFor Ubuntu, use our PPA:\n\n```bash\nsudo add-apt-repository ppa:jgmath2000/et\nsudo apt-get update\nsudo apt-get install et\n```\n\nOr see \"Debian/Ubuntu\" below to install and build from source (e.g., for ARM).\n\n### Debian\n\nFor Debian, use our deb repo:\n\n```bash\necho \"deb [signed-by=/etc/apt/keyrings/et.gpg] https://mistertea.github.io/debian-et/debian-source/ $(grep VERSION_CODENAME /etc/os-release | cut -d= -f2) main\" | sudo tee -a /etc/apt/sources.list.d/et.list\nsudo mkdir -m 0755 -p /etc/apt/keyrings # only if you're using Debian 11 or older\ncurl -sSL https://github.com/MisterTea/debian-et/raw/master/et.gpg | sudo tee /etc/apt/keyrings/et.gpg \u003e/dev/null\nsudo apt update\nsudo apt install et\n```\n\n### CentOS 7\n\nUp to the present day the only way to install is to [build from source](#centos-7-1).\n\n### CentOS 8\n\n```bash\nsudo dnf install epel-release\nsudo dnf install et\n```\n\n### FreeBSD\n\nOn FreeBSD, use:\n\n```bash\npkg install eternalterminal\n```\n\n### Fedora (version 29 and later):\n\n```bash\nsudo dnf install et\n```\n\n### openSUSE\n\n```bash\nzypper ar -f obs://network\nzypper ref\nzypper in EternalTerminal\n```\n\n### Other Linux\n\nInstall dependencies:\n\n- Fedora (tested on 25):\n\n  ```bash\n  sudo dnf install boost-devel libsodium-devel protobuf-devel \\\n  \tprotobuf-compiler cmake gflags-devel libcurl-devel\n  ```\n\n- Gentoo:\n\n  ```bash\n  sudo emerge dev-libs/boost dev-libs/libsodium \\\n  \tdev-libs/protobuf dev-util/cmake dev-cpp/gflags\n  ```\n\nDownload and install from source:\n\n```bash\ngit clone --recurse-submodules --depth 1 https://github.com/MisterTea/EternalTerminal.git\ncd EternalTerminal\nmkdir build\ncd build\ncmake ../\nmake\nsudo make install\n```\n\n### Windows\n\nEternal Terminal works under WSL (Windows Subsystem for Linux). Follow the ubuntu instructions.\n\n### Docker Image\n\nSee [docker/README.md](docker/)\n\n## Verifying\n\nVerify that the client is installed correctly by looking for the `et` executable: `which et`.\n\nVerify that the server is installed correctly by checking the service status: `systemctl status et`. On some operating systems, you may need to enable and start the service manually: `sudo systemctl enable --now et`.\n\nYou are ready to start using ET!\n\n## Configuring\n\nIf you'd like to modify the server settings (e.g. to change the listening port), edit /etc/et.cfg.\n\n## Using\n\nET uses ssh for handshaking and encryption, so you must be able to ssh into the machine from the client. Make sure that you can `ssh user@hostname`.\n\nET uses TCP, so you need an open port on your server. By default, it uses 2022.\n\n\nOnce you have an open port, the syntax is similar to ssh. Username is default to the current username starting the et process, use `-u` or `user@` to specify a different one if necessary.\n\n```bash\net hostname (etserver running on default port 2022, username is the same as current)\net user@hostname:8000 (etserver running on port 8000, different user)\n```\n\nYou can specify a jumphost and the port et is running on jumphost using `--jumphost` and `--jport`. If no `--jport` is given, et will try to connect to default port 2022.\n\n```bash\net hostname -jumphost jump_hostname (etserver running on port 2022 on both hostname and jumphost)\net hostname:8888 --jumphost jump_hostname --jport 9999\n```\n\nAdditional arguments that et accepts are port forwarding pairs with option `-t \"18000:8000, 18001-18003:8001-8003\"`, a command to run immediately after the connection is setup through `-c`.\n\nStarting from the latest release, et supports parsing both user-specific and system-wide SSH config files.\nThe config file is required when your sshd on server/jumphost is listening on a port which is not 22.\nHere is an example SSH config file showing how to setup when\n\n- there is a jumphost in the middle\n- sshd is listening on a port that is not 22\n- connecting to a different username other than the current one.\n\n```ssh-config\nHost dev\n  HostName 192.168.1.1\n  User fred\n  Port 5555\n  ProxyJump user@jumphost.example.org:22\n```\n\nWith the ssh config file set as above, you can simply call et with\n\n```bash\net dev (etserver running on port 2022 on both hostname and jumphost)\net dev:8000 -jport 9000 (etserver running on port 9000 on jumphost)\n```\n\n## Building from Source\n\n### macOS\n\nTo build Eternal Terminal on Mac, the easiest way is to grab dependencies with Homebrew:\n\n```bash\nbrew install autoconf automake libtool\ngit clone --recurse-submodules --depth 1 https://github.com/MisterTea/EternalTerminal.git\ncd EternalTerminal\nmkdir build\ncd build\ncmake ../\nmake -j$(nproc) \u0026\u0026 sudo make install\n```\n\nTo run an `et` server for testing, run `./etserver`. To run an `et`\nserver daemon persistently across reboots:\n\n```bash\nsudo cp ../init/launchd/homebrew.mxcl.et.plist /Library/LaunchDaemons\nsudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.et.plist\n```\n\n### Debian/Ubuntu\n\nGrab the deps and then follow this process.\n\nDebian/Ubuntu Dependencies:\n\n```bash\nsudo apt install libsodium-dev autoconf libtool \\\n\tlibprotobuf-dev protobuf-compiler libutempter-dev libcurl4-openssl-dev \\\n    build-essential ninja-build cmake git zip pkg-config\n```\n\nFetch source, build and install:\n\n```bash\ngit clone --recurse-submodules --depth 1 https://github.com/MisterTea/EternalTerminal.git\ncd EternalTerminal\nmkdir build\ncd build\n# For ARM (including OS/X with apple silicon):\nif [[ $(uname -a | grep 'arm\\|aarch64') ]]; then export VCPKG_FORCE_SYSTEM_BINARIES=1; fi\ncmake -DCPACK_GENERATOR=DEB ../\nmake -j$(nproc) package\nsudo dpkg --install *.deb\n```\n\nOnce built, the binary only requires `libprotobuf-dev`.\n\nDisable et server by `sudo systemctl disable --now et`\n\n### CentOS 7\n\nInstall dependencies:\n\n```bash\nsudo yum install epel-release\nsudo yum install cmake3 boost-devel libsodium-devel protobuf-devel \\\n     protobuf-compiler gflags-devel protobuf-lite-devel libcurl-devel \\\n     perl-IPC-Cmd perl-Data-Dumper libunwind-devel libutempter-devel\n```\n\nInstall scl dependencies\n\n```bash\nsudo yum install centos-release-scl\nsudo yum install devtoolset-11 devtoolset-11-libatomic-devel rh-git227\n```\n\nDownload and install from source ([see #238 for details](https://github.com/MisterTea/EternalTerminal/issues/238)):\n\n```bash\ngit clone --recurse-submodules --depth 1 https://github.com/MisterTea/EternalTerminal.git\ncd EternalTerminal\nmkdir build\ncd build\nscl enable devtoolset-11 rh-git227 'cmake3 ../'\nscl enable devtoolset-11 'make \u0026\u0026 sudo make install'\nsudo cp ../systemctl/et.service /etc/systemd/system/\nsudo cp ../etc/et.cfg /etc/\n```\n\nFind the actual location of et:\n\n```bash\nwhich etserver\n```\n\nCorrect the service file (see [#180](https://github.com/MisterTea/EternalTerminal/issues/180) for details).\n\n```bash\nsudo sed -ie \"s|ExecStart=[^[:space:]]*[[:space:]]|ExecStart=$(which etserver) |\" /etc/systemd/system/et.service\n```\n\nAlternatively, open the file /etc/systemd/system/et.service in an editor and correct the `ExectStart=...` line to point to the correct path of the `etserver` binary.\n\n\n```\nExecStart=/usr/local/bin/etserver --cfgfile=/etc/et.cfg\n```\n\nReload systemd configs:\n\n```bash\nsudo systemctl daemon-reload\n```\n\nStart the et service:\n\n```bash\nsudo systemctl enable --now et.service\n```\n\n## Building using Docker\n\nBuilder Dockerfiles are located at [deployment/](deployment/). Supported OSes: CentOS 8, openSUSE and Ubuntu.\n\n## Reporting issues\n\nIf you have any problems with installation or usage, please [file an issue on GitHub](https://github.com/MisterTea/EternalTerminal/issues).\n\n## Developers\n\n- Jason Gauci: https://github.com/MisterTea\n- Ailing Zhang: https://github.com/ailzhang\n- James Short: https://github.com/jshort\n","funding_links":["https://github.com/sponsors/MisterTea"],"categories":["C++","\u003ca name=\"cpp\"\u003e\u003c/a\u003eC++","Fancy shell sessions","tmux"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMisterTea%2FEternalTerminal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMisterTea%2FEternalTerminal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMisterTea%2FEternalTerminal/lists"}