{"id":14156284,"url":"https://github.com/holepunchto/hypershell","last_synced_at":"2026-01-27T21:22:40.033Z","repository":{"id":65366716,"uuid":"553176072","full_name":"holepunchto/hypershell","owner":"holepunchto","description":"Spawn shells anywhere. Fully peer-to-peer, authenticated, and end to end encrypted","archived":false,"fork":false,"pushed_at":"2024-03-18T12:02:03.000Z","size":80,"stargazers_count":246,"open_issues_count":3,"forks_count":9,"subscribers_count":15,"default_branch":"main","last_synced_at":"2024-11-29T00:45:55.091Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://docs.holepunch.to","language":"JavaScript","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/holepunchto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2022-10-17T20:50:38.000Z","updated_at":"2024-10-20T18:29:48.000Z","dependencies_parsed_at":"2024-01-07T21:02:15.529Z","dependency_job_id":"86b5048b-204b-4f15-b5c2-38254a282b3a","html_url":"https://github.com/holepunchto/hypershell","commit_stats":{"total_commits":29,"total_committers":1,"mean_commits":29.0,"dds":0.0,"last_synced_commit":"9a1113ef87740a262a430e53606722b4e3fbe5d4"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holepunchto%2Fhypershell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holepunchto%2Fhypershell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holepunchto%2Fhypershell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/holepunchto%2Fhypershell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/holepunchto","download_url":"https://codeload.github.com/holepunchto/hypershell/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228829134,"owners_count":17978158,"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":[],"created_at":"2024-08-17T08:05:20.877Z","updated_at":"2026-01-27T21:22:34.994Z","avatar_url":"https://github.com/holepunchto.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","others","\u003ca name=\"launcher\"\u003e\u003c/a\u003eCommand launchers"],"sub_categories":[],"readme":"# hypershell\n\nSpawn shells anywhere. Fully peer-to-peer, authenticated, and end to end encrypted.\n\n## Install\n```\nnpm i -g hypershell\n```\n\n## Usage\n```shell\n# Create keys\nhypershell-keygen [-f keyfile] [-c comment]\n\n# Create a P2P server\nhypershell-server [-f keyfile] [--firewall filename] [--disable-firewall] [--protocol name]\n\n# Connect to a P2P shell\nhypershell \u003cserver key or name\u003e [-f keyfile]\n\n# Local tunnel that forwards to remote host\nhypershell \u003cserver key or name\u003e -L [address:]port:host:hostport\n\n# Copy files (download and upload)\nhypershell-copy \u003c[@host:]source\u003e \u003c[@host:]target\u003e [-f keyfile]\n```\n\nUse `--help` with any command for more information, for example `hypershell-server --help`.\n\n## First steps\nKeys are automatically created with a default filename on first run.\n\nOtherwise, you can first do:\n```bash\nhypershell-keygen\n```\n\nJust connect to servers (they have to allow your public key):\n```bash\nhypershell \u003cserver name or public key\u003e\n```\n\nYou could also create a server:\n```bash\nhypershell-server\n```\n\n`~/.hypershell/authorized_peers` file will be empty, denying all connections by default.\\\nPublic keys can be added to the list to allow them in real-time.\n\nOr you can use the `--disable-firewall` flag to allow anyone to connect, useful for public services like game servers.\n\n## Known peers\nThere will be a file `~/.hypershell/known_peers`.\n\nAdd named peers to the file like for example:\n```bash\n# \u003cname\u003e \u003cpublic key\u003e\nhome cdb7b7774c3d90547ce2038b51367dc4c96c42abf7c2e794bb5eb036ec7793cd \n```\n\nNow just `hypershell home` (it saves you writing the entire public key).\n\n## hypershell-copy\nSimilar to `scp`. It works with files, and with folders recursively.\n\nFor the next examples, `remote_peer` is a name that can be added to the `known_peers` file.\n\nUpload a file from your desktop to a remote server:\n```bash\nhypershell-copy ~/Desktop/file.txt @remote_peer:/root/file.txt\n```\n\nDownload a file from a remote server to your desktop:\n```bash\nhypershell-copy @remote_peer:/root/database.json ~/Desktop/db-backup.json\n```\n\nNote: in the future, the `@` might be removed.\n\nYou can also use the public key of the server directly (without `@`):\n```bash\nhypershell-copy ~/Desktop/some-folder cdb7b7774c3d90547ce2038b51367dc4c96c42abf7c2e794bb5eb036ec7793cd:/root/backup-folder\n```\n\n## Local tunnel\n\n#### Client\n\nIt creates a local server, and every connection is forwarded to the remote host.\n\nIn this example, creates a local tunnel at `127.0.0.1:2020` (where you can connect to),\\\nthat later gets forwarded to a remote server which it connects to `127.0.0.1:3000`:\n```bash\nhypershell remote_peer -L 127.0.0.1:2020:127.0.0.1:3000\n```\n\nInstead of `remote_peer` you can use the server public key as well.\n\nYou can also pass several `-L` to run multiple local servers that remote forwards:\n```bash\nhypershell remote_peer -L 2020:127.0.0.1:3000 -L 2021:127.0.0.1:3000 -L 2022:127.0.0.1:3000\n```\n\n#### Server\n\nBy default, `hypershell-server` runs a server with full access, including forwarding to all hosts and ports.\n\nYou can run a server with restricted permissions to allow forwarding a specific host and port only.\n\nLet's say you have a local project like a React app at `http://127.0.0.1:3000/`,\\\nyou can create a restricted server to safely share this unique port like so:\n\n```bash\nhypershell-server --protocol tunnel --tunnel-host 127.0.0.1 --tunnel-port 3000\n```\n\nOr if you want to allow multiple hosts, port range, etc:\n\n```bash\nhypershell-server --protocol tunnel --tunnel-host 127.0.0.1 --tunnel-host 192.168.0.25 --tunnel-port 1080 --tunnel-port 3000 --tunnel-port 4100-4200\n```\n\nClients trying to use any different hosts/ports are automatically disconnected.\n\n## Multiple keys\nTo have multiple servers, you need multiple keys.\n\nGenerate another key:\n```bash\nhypershell-keygen -f ~/.hypershell/my-server\n```\n\nNow create a new shell server:\n```bash\nhypershell-server -f ~/.hypershell/my-server --firewall ~/.hypershell/my-server-firewall\n```\n\nThe client also accepts `-f` in case you need it.\n\n## Restrict server protocols\n\nThis is the list of server protocols:\n- `shell`\n- `upload`\n- `download`\n- `tunnel`\n\nBy default, all of them are enabled when running a server.\n\nFor example, you could limit it to shell only:\\\n`hypershell-server --protocol shell`\n\nOr only allow file upload and/or download:\\\n`hypershell-server --protocol upload --protocol download`\n\nRestrict to tunnel only:\\\n`hypershell-server --protocol tunnel`\n\nFor example, if you only allow `tunnel`, then any attempt from clients to `shell` into the server will auto disconnect them.\n\n## License\nApache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fholepunchto%2Fhypershell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fholepunchto%2Fhypershell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fholepunchto%2Fhypershell/lists"}