# rustdeskinstall: a wget-and-run script for a RustDesk server

> techahold/rustdeskinstall is a shell script that installs and updates a RustDesk server on systemd Debian or CentOS hosts. It saves time on the boring steps, but it also publishes preconfigured install files over HTTP on port 8000 and gives you little visibility into what the script actually does.

**techahold/rustdeskinstall** — Easy install Script for Rustdesk

- Repository: https://github.com/techahold/rustdeskinstall
- Stars: 717 · Forks: 171
- Language: Shell
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/techahold-rustdeskinstall

## A systemd host and one shell script are the whole contract

The scope is narrow and stated plainly: the script targets 64-bit Debian or CentOS based systems running systemd, and 32-bit ARM gets the server only, without the client. That single sentence eliminates most of the platforms people ask about. There is no container path, no systemd-less fallback, and no Windows server install here.

The install is three commands, and the first one is the interesting one because it fetches the script from GitHub over HTTPS before anything is executed:

```bash
wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh
chmod +x install.sh
./install.sh
```

The script is interactive: the README says to choose your preferences from the options it presents, which means the result depends on the answers you give, not on a fixed configuration. The repository is a flat set of shell and PowerShell files rather than a packaged tool: install.sh, update.sh, uninstall.sh, linuxclientinstall.sh, clientinstall.ps1, WindowsAgentAIOInstall.ps1 and windowsclientID.ps1 sit at the top level next to the Readme and the LICENSE file.

There is no release history on the repository and no package registry entry. You are running a master branch script that you fetched at the moment you ran wget, and the fetched copy is what defines your install.

## Your firewall decides whether the relay is reachable at all

The README is emphatic on one point: set up the firewall before running the script, and make sure you still have SSH access first, because the firewall rules and the SSH rule are two different things. The suggested SSH allowance is:

```bash
ufw allow proto tcp from YOURIP to any port 22
```

Then, for a host with UFW installed, the rules that open the RustDesk service are:

```bash
ufw allow 21115:21119/tcp
ufw allow 8000/tcp
ufw allow 21116/udp
sudo ufw enable
```

Two details hide in that block. Port 8000 is only needed if you use the preconfigured install files, so it is optional in the strict sense but included in the default recipe. And the TCP range 21115 through 21119 is five ports, which means a wide opening rather than a single one, plus a separate UDP port at 21116 for the other transport. If you use a different firewall such as firewalld or nftables, the README gives no equivalent commands, so translating the intent is on you.

Enabling UFW with sudo ufw enable in the same step means the session that runs the script is about to change the network rules of the host it is running on. The ordering advice in the README is not a formality.

## Preconfigured install files publish your IP, DNS and key over HTTP

The script offers to create preconfigured install files with your IP or DNS and your key already filled in. When you accept, it installs a gohttpserver on port 8000 so that you can download the install scripts easily, which is the stated reason port 8000 appears in the firewall rules.

This is the design decision that deserves the most attention, because it is a convenience feature with a security cost. The payload being served is what a client install needs, and it is served over plain HTTP from the same host that runs the relay. Whether that is acceptable depends on your network and on whether the key is short lived.

The README also describes a Windows PowerShell install script that generates a script for installing the client, grabbing the WAN IP and the key, and notes that these values currently live in /opt/rustdesk but will be moved to a web URL for easy deployment. The phrase currently matters: the files are on disk today, and the move to a web URL is described as a plan rather than a shipped state, so the exact behaviour of a given install can differ from the intent described here. If you want to inspect what the files contain before handing them to a client, /opt/rustdesk is the place to look.

## Updating means fetching a second script, not upgrading a package

There is no versioned artefact to pin and no upgrade command. The update path is its own script from the same raw URL:

```bash
wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/update.sh
chmod +x update.sh
./update.sh
```

The same caveat applies here as with the install: the file you run is whatever master holds at that moment, and because the repository has no GitHub releases, there is no tag to fall back on if a new script misbehaves. If you want a reproducible server, the practical step is to keep your own copy of the fetched script and read it before executing it.

For routine service changes, the README points at the two systemd units the installer creates:

```bash
sudo systemctl restart rustdesksignal
sudo systemctl restart rustdeskrelay
```

The unit names tell you the split: rustdesksignal and rustdeskrelay are separate services, so you can restart the signalling side without dropping the relay. The repository also ships uninstall.sh, which is a reasonable reason to trust that the install leaves a path back out.

## Client installs are separate scripts, not a shared configuration

Server and client are not handled by the same path. On the server side, the install script and update script cover the RustDesk server. On the client side, the repository carries linuxclientinstall.sh for Linux and several PowerShell files: clientinstall.ps1 for a general client install, WindowsAgentAIOInstall.ps1 for a Windows agent install, and windowsclientID.ps1.

The Windows script is described in the README as generating a PowerShell script that grabs the WAN IP and the key and, at the time of writing, reads them from /opt/rustdesk. That is the mechanism that connects a client to your server: the client needs the server address and the key, and these scripts gather and embed them. The README does not document the parameters these scripts accept, so the exact invocation has to be read from the files themselves rather than from the documentation.

The separation also means the arm limitation is per component. On 32-bit ARM the server is installed, so such a host can act as a relay, but you will not get the client there. If you are planning a mixed fleet, check that the client script for your architecture is the one you need before assuming the install covered it.

## MIT licensed, commercially supported, and thin on documentation

The licence is MIT, which is about as permissive as it gets for redistribution and modification. The same repository also carries a commercial offer: the maintainers provide professional hosting and support for RustDesk OSS and RustDesk Pro, and point to hello@techahold.com for assistance. That is a services relationship, not a change of licence, but it tells you who is behind the scripts and where to go if the unsupported path stops working.

Documentation is where this project is weakest. The Readme covers the firewall commands, the install and update scripts, the service restart commands and the Windows client flow, and it mentions a Hetzner referral credit as a cheap way to test a deployment. It does not document the contents of install.sh line by line, does not explain the interactive options it offers, does not describe what uninstall.sh removes, and does not state whether the gohttpserver on port 8000 is stopped on uninstall.

On maintenance: the last push was on 2026-05-21, and the repository has no GitHub releases, so there is no version trail to follow. A script you fetch from master with a documented update procedure but no releases is the shape of a tool that works fine until the day a new script does not, which is precisely when the missing documentation hurts most.

## Conclusion

Adopt rustdeskinstall if you run a systemd Debian or CentOS host, want a RustDesk server running in a few minutes, and are comfortable auditing a shell script before running it as root. Do not adopt it if you need the 32-bit ARM client, need Windows or non-systemd hosts, or cannot accept a helper HTTP server on port 8000. Before running install.sh, read it, confirm your firewall allows 21115:21119/tcp and 21116/udp, and decide whether you want preconfigured files containing your IP, DNS and key to be published on port 8000.

## FAQ

### Which firewall ports does rustdeskinstall need?

The README opens 21115:21119/tcp and 21116/udp, plus 8000/tcp if you use the preconfigured install files. It also advises allowing SSH access before enabling the firewall, for example with ufw allow proto tcp from YOURIP to any port 22.

### Does rustdeskinstall install the RustDesk client on 32-bit ARM?

No. The README states that 32-bit ARM systems get the RustDesk server only. Client installation on that architecture is not covered.

### How do I update a server installed with rustdeskinstall?

Fetch and run the separate update script from the same repository with wget, then chmod +x update.sh and ./update.sh. The repository publishes no GitHub releases, so there is no tagged version to pin.

### What services does the installer create and how do I restart them?

The README gives systemctl restart commands for rustdesksignal and rustdeskrelay, so the signalling and relay parts run as two separate systemd services. The repository also ships uninstall.sh, though the Readme does not describe what it removes.

### What licence is rustdeskinstall released under?

The repository is MIT licensed, with a LICENSE file at the top level. The maintainers separately offer paid hosting and support for RustDesk OSS and RustDesk Pro.

## Sources

- [Issues](https://github.com/techahold/rustdeskinstall/issues)
- [License: MIT](https://github.com/techahold/rustdeskinstall/blob/master/LICENSE)
- [README](https://github.com/techahold/rustdeskinstall/blob/master/README.md)
- [techahold/rustdeskinstall on GitHub](https://github.com/techahold/rustdeskinstall)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/techahold-rustdeskinstall
