Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров30K
RustDesk — приложение для удалённого рабочего стола с открытым исходным кодом, разработанное для самохостинга в качестве альтернативы TeamViewer. Название такое, потому что программа написана на Rust.
Работает из коробки, не требует конфигурации. Если установить сервер синхронизации на своём хостинге, то любые машины в интернете могут синхронизироваться и устанавливать соединение через наш сервер для удалённого управления рабочими столами друг друга. Трафик идёт напрямую между ними, но если это невозможно — тоже через сервер, до 3 Мбит/с (1920×1080).
Клиентское приложение есть для iOS и Android (на КДПВ), что позволяет со смартфона управлять рабочим столом Windows, Linux и MacOS (и наоборот), а также обмениваться файлами. Есть ещё веб-клиент.
Нужно заметить, что серверный компонент RustDesk распространяется с закрытым исходным кодом, что даёт возможность компании взимать плату за его использование (даже на самохостинге, без SaaS). У бесплатной опенсорсной версии ряд ограничений:
В документации описана установка и использование RustDesk в контейнере Docker, на свой сервер под Windows с PM2 или NSSM, на Synology DSM 7.2 и DSM 6, Ubuntu Server, а также Ubuntu Server с Docker. Всё это доступные варианты самохостинга.
Будем устанавливать серверную версию для Ubuntu Server.
Как обычно, выбираем подходящую конфигурацию сервера в конфигураторе RUVDS или из готовых шаблонов. Минималистичные серверы ценой от 139 руб. в месяц находятся в разделе VPS Старт. Для RustDesk такого достаточно:
Аппаратные требования серверного модуля RustDesk очень низкие. В документации сказано, что можно выбирать VPS минимальной конфигурации, а также использовать в качестве сервера Raspberry Pi или другой одноплатник. Что касается канала, то при сбое прямого соединения TCP hole punching трафик пойдёт через сервер ретрансляции. Трафик ретрансляционного соединения составляет от 30 Кбит/с до 3 Мбит/с (разрешение экрана 1920×1080) в зависимости от настроек разрешения и частоты обновления экрана. Для офисной работы достаточно 100 Кбит/с.
На Ubuntu Server есть два способа установки RustDesk: в контейнере Docker или путём обычной установки .deb. Начинающим пользователям рекомендуется использовать контейнер, потому что там достаточно просто скопировать compose.yml
, внести некоторые изменения — и всё готово. Свежие контейнеры Docker в репозитории автоматически генерируются при каждом релизе, после чего публикуются в Docker Hub и GitHub Container Registry. Есть два типа контейнеров:
- классические образы под архитектуры amd64, arm64v8, armv7
- образы на базе S6-overlay с добавлением бинарных файлов
Но в таком случае минимальной конфигурации VPS будет недостаточно, потому что виртуальной машине на самохостинге нужно минимум 1 ГБ RAM и 32 ГБ места на диске.
▍ Установка скриптом
Что касается простой установки на чистом Linux, то можно использовать специальный инсталляционный скрипт, который проверен под CentOS Linux 7/8, Ubuntu 18/20/22/24 и Debian.
Его мы и используем в первую очередь.
На VPS-сервере после его включения уже установлена операционная система Ubuntu 24.04, а нам выдали IP-адрес и учётные данные для авторизации:
Дальнейший алгоритм действий:
- Подключаемся к серверу стандартным способом по SSH:
Устанавливаем файрвол UFW (стандартный вариант для систем на базе Debian):
apt-get install ufw
- Настраиваем порты файрвола:
ufw allow 21114:21119/tcp ufw allow 8000/tcp ufw allow 21116/udp sudo ufw enable
(Теоретически, сначала на файрволе надо открыть порт 22 для SSH, но на нашем VPS от RUVDS он изначально открыт).
- Запускаем инсталляционный скрипт:
wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/install.sh chmod +x install.sh ./install.sh
Скрипт устанавливает все необходимые программы и зависимости, а потом спрашивает о предпочтительном методе подключения к серверу: IP-адрес или домен.
Выбираем IP-адрес.
Потом предлагает скачать файлы конфигурации и установить HTTP-сервер:
Можно согласиться.
- Установка сервера завершена с выдачей публичного ключа, админского логина и пароля:
▍ Установка клиентов
Теперь установим RustDesk на клиентские устройства, откуда будет происходить передача и управление рабочим столом. Клиентские устройства подключаются к серверу по указанному IP-адресу, используя его публичный ключ, выданный ранее:
Your IP/DNS Address is 194.87.103.130 Your public key is 1AQBKNnylHs9ZEq32I2Axl51MJtCNp0Reqngdlu4Hvg= Install Rustdesk on your machines and change your public key and IP/DNS name to the above You can access your install scripts for clients by going to http://194.87.103.130:8000 Username is admin and password is 5EIpg7IAH07YYujc
Если зайти к себе на сервер по адресу http://194.87.103.130:8000
с админским паролем, то там лежат скрипты для установки клиентов под Linux и Windows, в том числе PowerShell-скрипт WindowsAgentAIOInstall.ps1
для установки клиента RustDesk под Windows.
Запускаем скрипт на исполнение. Под Windows установка занимает десяток секунд, после чего открывается окно для управления рабочим столом:
Дальнейшее понятно. Если нужно управлять удалённым рабочим столом, то вводим удалённый ID. Если наоборот — то здесь же указан ID данного рабочего стола и пароль.
Примечание. Десктопные версии RustDesk используют библиотеку Flutter или Sciter (устаревшую) для GUI, вторую в случае необходимости придётся скачать отдельно: Windows | Linux | macOS.
В репозитории Techahold есть ещё скрипт для обновления RustDesk, он может пригодиться в будущем:
wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/update.sh
chmod +x update.sh
./update.sh
Установка RustDesk на Ubuntu Server, видеоруководство:
▍ Сборка вручную
Инструкции по сборке см. в официальном репозитории rustdesk-server:
cargo build --release
Эта команда генерирует три исполняемых файла:
hbbs
— сервер RustDesk ID/Rendezvoushbbr
— сервер ретрансляции RustDeskrustdesk-utils
— консольные утилиты RustDesk
Отдельно распространяются платная версия RustDesk Server Pro и упрощённая демо-версия rustdesk-server-demo, предназначенная для создания собственных реализаций RustDesk.
У платной версии есть ряд дополнительных опций, по сравнению с бесплатной: в том числе веб-консоль (на порту 21114), через которую можно управлять всеми клиентами, где мы установили RustDesk.
В платной версии для самохостинга есть 2FA, контроль доступа, централизованные настройки и функция распределённых рилей-серверов.
▍ Установка из файла
Скачиваем файлы .deb
из раздела Download
в официальном репозитории и устанавливаем командой:
apt-get -f install <filename>.deb
или
dpkg -i <filename>.deb
В этом же разделе лежат исполняемые файлы сервера под Linux и Windows, консольные утилиты и проч.
Если возникают проблемы с пробитием файрвола, см. отдельную статью, где описана настройка технологии NAT Loopback на маршрутизаторе и установка локального DNS-сервера.
▍ P2P Remote Desktop
В качестве бонуса можно упомянуть ещё P2P Remote Desktop: P2P-удалённый десктоп, тоже альтернатива TeamViewer/AnyDesk. Эта портативная программа для Windows работает предельно просто: просто копируем рабочий файл p2p.exe
на оба компьютера, которые планируется подключить друг к другу.
Затем на одном из компьютеров нужно скопировать My Wan IP
(и порт) или My Lan IP
— и передать его на второй, а со второго на первый.
Теперь на каждом из узлов указано по два IP-адреса, так что подключаемся: на обоих ПК нажимаем Connect
. После установления связи прямой пиринговой можно обмениваться текстовыми сообщениями или управлять рабочим столом удалённого компьютера, для этого предназначена кнопка Desktop
.
Для работы используется протокол UDT, и он должен пробивать большинство файрволов.
Наверное, это самая простая программа для удалённого управления рабочим столом, хотя тут тоже используется промежуточный сервер для синхронизации. Тем не менее, это минималистичная и бесплатная программа.
Из других более-менее рабочих опенсорсных альтернатив TeamViewer можно упомянуть Remotely, Screego и MeshCentral+Tactical RMM.
© 2025 ООО «МТ ФИНАНС»
Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
This article discusses how to install and configure the Remote Access Server RustDesk under Windows Server. The guide is written for Windows Server Core but is just as applicable to Windows Server with a GUI.
Introduction
RustDesk is a remote access rendezvous point server which allows a remote support agent to connect to a remote computer remotely while providing screen sharing, remote control and clipboard support. RustDesk is an open source equivalent to the obnoxiously expensive “TeamViewer”, LogMeIn123 and others.
Prerequisites
This article assumes that:
- You have a clean install of Windows Server 2016, 2019 or 2022.
- You are running on Server Core and wish to do everything via the command line (everything in the guide is fully applicable to Server GUI, and can be executed from the command line or manually using the GUI interfaces where appropriate).
- You are running RustDesk on a dedicated server / virtual machine using a dedicated user account
Note: As of writing, it does not seem possible to run RustDesk as a native Windows Service (it immediately exits out if you try to launch it through a service user account). You must either run it manually as an application within a user account or within a user account via the pm2 process manager. Both methods are outlined below. - You have already configured NAT/PAT port forwards from your router to your virtual machine as appropriate to your environment.
TCP: 21115, 21116, 21117, 21118, 21119
UDP: 21116
Installation
- Download and install the current version of the Visual C++ Runtime 2015 – 2022 Library for x64 (version 14 is the specific version required).
Download: Microsoft Visual C++ Runtime - It is recommended that you do not use the default administrator account to run RustDesk. If you do not wish to use the Administrator account, create a dedicated user for RustDesk to run with on your domain or on the local machine (recommended).
To create a user on the local machine:net user <username> <password> /ADD
- To add this user to the Administrators group:
net localgroup Administrators <username> /ADD
- Setup automatic logon to Windows by editing and using the following commands (if you are not on a domain, you can omit DefaultDomainName value)
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /t REG_SZ /v "DefaultUserName" /d "Plex" /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /t REG_SZ /v "DefaultPassword" /d "your_password_here" /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /t REG_SZ /v "DefaultDomainName" /d "your_domain_here" /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /t REG_SZ /v "AutoAdminLogon" /d "1" /f
- Create and enable the necessary firewall rules to allow clients to connect to RustDesk. To do this in PowerShell:
New-NetFirewallRule -Name RustDesk-TCP -DisplayName "RustDesk-TCP" -Description "RustDesk TCP Rules" -Direction Inbound -Protocol TCP -LocalPort 21115-21119 -Action Allow New-NetFirewallRule -Name RustDesk-UDP -DisplayName "RustDesk-UDP" -Description "RustDesk UDP Rules" -Direction Inbound -Protocol UDP -LocalPort 21116 -Action Allow Enable-NetFirewallRule -Name RustDesk-TCP Enable-NetFirewallRule -Name RustDesk-UDP
- Download the latest Windows x64 binary of the RustDesk installer
Download: RustDesk Server - Create the folder
C:\Program Files\RustDesk
mkdir "%ProgramFiles%\RustDesk"
- Extract hbbr.exe and hbbs.exe into
C:\Program Files\RustDesk
Using node.js & pm2
If you wish to use node.js and pm2 to manage the process within the user account follow this section. If you do not, skip to the next section.
- Download and install the current version of node.js*. The basic installation is sufficient (without installing Chocolaty). Once installed, log off and then back in again to refresh your path environment variables on any open command and PowerShell prompts.
Download: Node.js - Install pm2 process manager by entering the following commands
npm install -g pm2 npm install pm2-windows-startup -g pm2-startup install
- Register the two RustDesk services with pm2
pm2 start "C:\Program Files\RustDesk\hbbs.exe" -- --relay-servers <RelayServerIpOrFqdn>:21117 pm2 start "C:\Program Files\RustDesk\hbbr.exe" pm2 save
Note: If you wish to use a key to provide an additional layer of security for your server. change the first line above to:
pm2 start "C:\Program Files\RustDesk\hbbs.exe" -- --relay-servers <RelayServerIpOrFqdn>:21117 --key <YourKey>
- Test using a RustDesk client
If you made a mistake and need to change the pm2 parameters use the following commands to delete the recordspm2 delete "C:\Program Files\RustDesk\hbbs.exe" pm2 delete "C:\Program Files\RustDesk\hbbr.exe"
Then re-add the entry(s) as in step 10 and re-save by entering
pm2 save
.
To view the process list enterpm2 list
- Check that pm2 was successfully able to start the services and to view the current daemon status’ (and use Ctrl + C on the keyboard to close).
pm2 log hbbr pm2 log hbbs
Without using node.js and pm2
If you do not want to use node.js and pm2 to manage your install, you can use my RustDesk Service Scripts to start, stop and restart RustDesk on your server.
Note: The following is only applicable to Server Core. For GUI Windows Server, add a shortcut to C:\Program Files\RustDesk\Start-RustDesk.cmd
in the Startup folder or add an entry to the same file under HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
- Download my RustDesk tools zip
Download: RustDesk-Tools (1KB) - Extract the contents of the zip file into
C:\Program Files\RustDesk
- Use notepad to edit the
Start-RustDesk.cmd
script file and set the value for the relayServer IP/FQDN to match your environment.
If you wish to use a key to secure your server, add--key <YourKey>
to the end of the hbbs.exe line e.g.start "HBBS-RustDesk" /min "%ProgramFiles%\RustDesk\hbbs.exe" --relay-servers %relayServer%:%relayPort% --key <YourKey>
- Enter the command:
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /t REG_SZ /v "10" /d "C:\Program Files\RustDesk\Start-RustDesk.cmd" /f
- Restart the server and RustDesk should automatically load as two minimised windows in the bottom left of the Server Code screen
- Test using a RustDesk client
Rustdesk server Install Script
Easy install Script for Rustdesk on linux, should work on any 64bit (32bit arm will install rustdesk server only) debian or centos based system supporting systemd.
For Rustdesk visit https://rustdesk.com
You can use Hetzner to test this with a $20 credit using this referal code https://hetzner.cloud/?ref=p6iUr7jEXmoB
We provide professional hosting and support for RustDesk OSS and RustDesk Pro, please email hello@techahold.com if you need assistance.
How to Install the server
Please setup your firewall on your server prior to running the script.
Make sure you have got access via ssh or otherwise setup prior setting up the firewall, command for UFW is:
ufw allow proto tcp from YOURIP to any port 22
If you have UFW installed use the following commands (you only need port 8000 if you are using the preconfigured install files):
ufw allow 21115:21119/tcp
ufw allow 8000/tcp
ufw allow 21116/udp
sudo ufw enable
Run the following commands:
wget https://raw.githubusercontent.com/dinger1986/rustdeskinstall/master/install.sh
chmod +x install.sh
./install.sh
Choose your preferences from the options given in the script.
Please Note:
If you allow the script to create preconfigured install files (with your IP/DNS and key set) it will install gohttpserver using port 8000 for you to easily download the install scripts.
How to update the server
Run the following commands:
wget https://raw.githubusercontent.com/techahold/rustdeskinstall/master/update.sh
chmod +x update.sh
./update.sh
Rustdesk windows powershell install script
Generates a powershell script for install grabbing WAN IP and Key currently in /opt/rustdesk but will be moved to a web url for easy deployment.
Tips
If you want to restart the services use the following commands:
sudo systemctl restart rustdesksignal
sudo systemctl restart rustdeskrelay
Делаем свой удалённый доступ к компьютеру
Ставим RustDesk на компьютер и сервер
Обновлено 28.05.2024
medium
Удалённый доступ к компьютеру — это когда вы сидите у себя дома и со своего компьютера управляете чужим: двигаете мышкой, создаёте папки, нажимаете клавиши и т. д. Обычно это нужно для техподдержки: если у родных проблемы с компьютером, но вам не хочется ехать к ним физически. Или если у вас компьютер на работе, а вам нужно получить к нему доступ из дома.
Программ для удалённого доступа много — недавно мы делали подборку. Проблема в том, что все они работают через чужой сервер. Если он перестанет работать, сервис закроется или решит уйти из России, удалённого управления не будет. Например, из России ушёл сервис TeamViewer — самый популярный сервис удалённого доступа.
Сегодня мы поднимем собственный сервер удалённого доступа, чтобы ни от кого не зависеть.
Что нам понадобится
Мы будем использовать RustDesk — бесплатную программу с открытым исходным кодом для удалённого управления компьютером. Её можно поставить на свой сервер и компьютеры и ни от кого не зависеть.
Софт для удалённой работы состоит из двух частей — серверной и клиентской. Серверная часть — это такой виртуальный центр связи, который соединяется с компьютерами и передаёт данные с одного компьютера на другой. Серверная часть ставится на сервере — для этого мы будем использовать учебный сервер для виртуального хранилища.
Клиентская часть устанавливается и запускается на тех компьютерах, где нам нужен удалённый доступ — для управления или чтобы кто-то смог к нам удалённо подключиться.
У RustDesk есть и то и другое, поэтому установим всё по очереди.
Устанавливаем серверную часть
Чтобы установить что-то на сервер, нам нужно сначала получить к нему доступ. Чаще всего доступ к серверу настраивают по SSH и работают из командной строки, поэтому мы будем делать точно так же: подключимся к серверу и введём нужные команды.
Идём на официальный гитхаб проекта, берём оттуда скрипт установки серверной части и вставляем его в командную строку сервера:
wget https://raw.githubusercontent.com/dinger1986/rustdeskinstall/master/install.sh
chmod +x install.sh
./install.sh
Во время установки у нас спросят: IP или DNS — выбираем IP:
Дальше скрипт нам предложить скачать HTTP-сервер, который нужен для работы программы. Соглашаемся и вводим 1:
Когда всё будет готово, скрипт отдаст нам пароль администратора и публичны ключ — они нам понадобятся в будущем:
Вам может быть интересно:
Устанавливаем программу на компьютер
Заходим на официальный сайт RustDesk и скачиваем программу для своей операционной системы. Мы зашли на сайт с макбука, поэтому нам сразу предложили скачать версию для MacOS:
После запуска программа сразу предлагает настроить разрешение на снимки экрана и универсальный доступ (в Windows такого нет, там с этим всё проще):
Нажимаем «Настроить», заходим в системные настройки, нажимаем замочек внизу и ставим галочку напротив RustDesk:
Теперь укажем адрес нашей серверной части, которую мы установили раньше. Для этого нажимаем на три точки, выбираем «ID/Сервер трансляции» и вводим там IP-адрес нашего сервера. Он совпадает с адресом, по которому мы подключались по SSH, а ещё этот адрес сообщаем нам сам сервер при установке:
Внизу сразу меняется статус подключения на «Готово» — это значит, что сервер и клиент нашли друг друга и готовы работать вместе.
Теперь точно так же устанавливаем и настраиваем эту программу на том компьютере, которым мы хотим удалённо управлять. После этого на одном из них вводим ID другого, нажимаем «Подключиться»:
Вёрстка:
Кирилл Климентьев
#!/bin/bash
# Get user options
while getopts i:—: option; do
case «${option}» in
—)
case «${OPTARG}» in
help)
help=«true»;;
resolveip)
resolveip=«true»;;
resolvedns)
val=«${!OPTIND}»; OPTIND=$(( $OPTIND + 1 ))
resolvedns=${val};;
install—http)
http=«true»;;
skip—http)
http=«false»;;
esac;;
i) resolveip=«true»;;
esac
done
function displayhelp() {
if [[ ! —z $help ]]; then
echo ‘usage: install.sh —resolveip —resolvedns «fqdn»‘
echo «options:»
echo «—resolveip Use IP for server name. Cannot use in combination with —resolvedns or -d»
echo ‘—resolvedns «fqdn» Use FQDN for server name. Cannot use in combination with —resolveip or -i’
echo «—install-http Install http server to host installation scripts. Cannot use in combination with —skip-http or -n»
echo «—skip-http Skip installation of http server. Cannot use in combination with —install-http or -h»
exit 0
fi
}
displayhelp
# Get Username
uname=$(whoami)
admintoken=$(head /dev/urandom | tr —dc A—Za—z0—9 | head —c16)
ARCH=$(uname —m)
# identify OS
if [ —f /etc/os—release ]; then
# freedesktop.org and systemd
. /etc/os—release
OS=$NAME
VER=$VERSION_ID
UPSTREAM_ID=${ID_LIKE,,}
# Fallback to ID_LIKE if ID was not ‘ubuntu’ or ‘debian’
if [ «${UPSTREAM_ID}» != «debian» ] && [ «${UPSTREAM_ID}» != «ubuntu» ]; then
UPSTREAM_ID=«$(echo ${ID_LIKE,,} | sed s/\»//g | cut -d’ ‘ -f1)»
fi
elif type lsb_release >/dev/null 2>&1; then
# linuxbase.org
OS=$(lsb_release —si)
VER=$(lsb_release —sr)
elif [ —f /etc/lsb—release ]; then
# For some versions of Debian/Ubuntu without lsb_release command
. /etc/lsb—release
OS=$DISTRIB_ID
VER=$DISTRIB_RELEASE
elif [ —f /etc/debian_version ]; then
# Older Debian/Ubuntu/etc.
OS=Debian
VER=$(cat /etc/debian_version)
elif [ —f /etc/SuSe—release ]; then
# Older SuSE/etc.
OS=SuSE
VER=$(cat /etc/SuSe—release)
elif [ —f /etc/redhat—release ]; then
# Older Red Hat, CentOS, etc.
OS=RedHat
VER=$(cat /etc/redhat—release)
else
# Fall back to uname, e.g. «Linux <version>», also works for BSD, etc.
OS=$(uname —s)
VER=$(uname —r)
fi
# output debugging info if $DEBUG set
if [ «$DEBUG» = «true» ]; then
echo «OS: $OS»
echo «VER: $VER»
echo «UPSTREAM_ID: $UPSTREAM_ID»
exit 0
fi
# Setup prereqs for server
# common named prereqs
PREREQ=«curl wget unzip tar»
PREREQDEB=«dnsutils»
PREREQRPM=«bind-utils»
PREREQARCH=«bind»
echo «Installing prerequisites»
if [ «${ID}» = «debian» ] || [ «$OS» = «Ubuntu» ] || [ «$OS» = «Debian» ] || [ «${UPSTREAM_ID}» = «ubuntu» ] || [ «${UPSTREAM_ID}» = «debian» ]; then
sudo apt—get update
sudo apt—get install —y ${PREREQ} ${PREREQDEB} # git
elif [ «$OS» = «CentOS» ] || [ «$OS» = «RedHat» ] || [ «${UPSTREAM_ID}» = «rhel» ] ; then
# opensuse 15.4 fails to run the relay service and hangs waiting for it
# needs more work before it can be enabled
# || [ «${UPSTREAM_ID}» = «suse» ]
sudo yum update —y
sudo yum install —y ${PREREQ} ${PREREQRPM} # git
elif [ «${ID}» = «arch» ] || [ «${UPSTREAM_ID}» = «arch» ]; then
sudo pacman —Syu
sudo pacman —S ${PREREQ} ${PREREQARCH}
else
echo «Unsupported OS»
# give them the option to continue
echo —n «Would you like to continue? Dependencies may not be satisfied… [y/n] «
read continue_no_dependencies
if [ $continue_no_dependencies == «y» ]; then
echo «Continuing…»
elif [ $continue_no_dependencies != «n» ]; then
echo «Invalid answer, exiting.»
exit 1
else
exit 1
fi
fi
# Choice for DNS or IP
if [[ —z «$resolveip» && —z «$resolvedns» ]]; then
PS3=‘Choose your preferred connection method: auto-resolve current WAN IP or enter your DNS/Domain:’
WAN=(«IP» «DNS/Domain»)
select WANOPT in «${WAN[@]}»; do
case $WANOPT in
«IP»)
wanip=$(dig @resolver4.opendns.com myip.opendns.com +short)
break
;;
«DNS/Domain»)
echo —ne «Enter your preferred domain/dns address ${NC}: «
read wanip
#check wanip is valid domain
if ! [[ $wanip =~ ^[a—zA—Z0—9]+([a—zA—Z0—9.—]*[a—zA—Z0—9]+)?$ ]]; then
echo —e «${RED}Invalid domain/dns address${NC}»
exit 1
fi
break
;;
*) echo «invalid option $REPLY»;;
esac
done
elif [[ ! —z «$resolveip» && ! —z «$resolvedns» ]]; then
echo —e «\nERROR: You cannot use both —resolveip & —resolvedns options simultaneously»
exit 1
elif [[ ! —z «$resolveip» && —z «$resolvedns» ]]; then
wanip=$(dig @resolver4.opendns.com myip.opendns.com +short)
elif [[ —z «$resolveip» && ! —z «$resolvedns» ]]; then
wanip=«$resolvedns»
if ! [[ $wanip =~ ^[a—zA—Z0—9]+([a—zA—Z0—9.—]*[a—zA—Z0—9]+)?$ ]]; then
echo —e «${RED}Invalid domain/dns address${NC}»
exit 1
fi
fi
# Make Folder /opt/rustdesk/
if [ ! —d «/opt/rustdesk» ]; then
echo «Creating /opt/rustdesk»
sudo mkdir —p /opt/rustdesk/
fi
sudo chown «${uname}» —R /opt/rustdesk
cd /opt/rustdesk/ || exit 1
#Download latest version of Rustdesk
RDLATEST=$(curl https://api.github.com/repos/rustdesk/rustdesk—server/releases/latest —s | grep «tag_name» | awk —F‘»‘ ‘{print $4}’)
echo «Installing Rustdesk Server»
if [ «${ARCH}» = «x86_64» ] ; then
wget «https://github.com/rustdesk/rustdesk-server/releases/download/${RDLATEST}/rustdesk-server-linux-amd64.zip»
unzip rustdesk—server—linux—amd64.zip
mv amd64/* /opt/rustdesk/
elif [ «${ARCH}» = «armv7l» ] ; then
wget «https://github.com/rustdesk/rustdesk-server/releases/download/${RDLATEST}/rustdesk-server-linux-armv7.zip»
unzip rustdesk—server—linux—armv7.zip
mv armv7/* /opt/rustdesk/
elif [ «${ARCH}» = «aarch64» ] ; then
wget «https://github.com/rustdesk/rustdesk-server/releases/download/${RDLATEST}/rustdesk-server-linux-arm64v8.zip»
unzip rustdesk—server—linux—arm64v8.zip
mv arm64v8/* /opt/rustdesk/
fi
chmod +x /opt/rustdesk/hbbs
chmod +x /opt/rustdesk/hbbr
# Make Folder /var/log/rustdesk/
if [ ! —d «/var/log/rustdesk» ]; then
echo «Creating /var/log/rustdesk»
sudo mkdir —p /var/log/rustdesk/
fi
sudo chown «${uname}» —R /var/log/rustdesk/
# Setup Systemd to launch hbbs
rustdesksignal=«$(cat << EOF
[Unit]
Description=Rustdesk Signal Server
[Service]
Type=simple
LimitNOFILE=1000000
ExecStart=/opt/rustdesk/hbbs —k _
WorkingDirectory=/opt/rustdesk/
User=${uname}
Group=${uname}
Restart=always
StandardOutput=append:/var/log/rustdesk/signalserver.log
StandardError=append:/var/log/rustdesk/signalserver.error
# Restart service after 10 seconds if node service crashes
RestartSec=10
[Install]
WantedBy=multi—user.target
EOF
)«
echo «${rustdesksignal}» | sudo tee /etc/systemd/system/rustdesksignal.service > /dev/null
sudo systemctl daemon—reload
sudo systemctl enable rustdesksignal.service
sudo systemctl start rustdesksignal.service
# Setup Systemd to launch hbbr
rustdeskrelay=«$(cat << EOF
[Unit]
Description=Rustdesk Relay Server
[Service]
Type=simple
LimitNOFILE=1000000
ExecStart=/opt/rustdesk/hbbr —k _
WorkingDirectory=/opt/rustdesk/
User=${uname}
Group=${uname}
Restart=always
StandardOutput=append:/var/log/rustdesk/relayserver.log
StandardError=append:/var/log/rustdesk/relayserver.error
# Restart service after 10 seconds if node service crashes
RestartSec=10
[Install]
WantedBy=multi—user.target
EOF
)«
echo «${rustdeskrelay}» | sudo tee /etc/systemd/system/rustdeskrelay.service > /dev/null
sudo systemctl daemon—reload
sudo systemctl enable rustdeskrelay.service
sudo systemctl start rustdeskrelay.service
while ! [[ $CHECK_RUSTDESK_READY ]]; do
CHECK_RUSTDESK_READY=$(sudo systemctl status rustdeskrelay.service | grep «Active: active (running)»)
echo —ne «Rustdesk Relay not ready yet…${NC}\n»
sleep 3
done
pubname=$(find /opt/rustdesk —name «*.pub»)
key=$(cat «${pubname}»)
echo «Tidying up install»
if [ «${ARCH}» = «x86_64» ] ; then
rm rustdesk—server—linux—amd64.zip
rm —rf amd64
elif [ «${ARCH}» = «armv7l» ] ; then
rm rustdesk—server—linux—armv7.zip
rm —rf armv7
elif [ «${ARCH}» = «aarch64» ] ; then
rm rustdesk—server—linux—arm64v8.zip
rm —rf arm64v8
fi
echo «Grabbing installers»
string=«{\»host\»:\»${wanip}\»,\»key\»:\»${key}\»,\»api\»:\»https://${wanip}\»}»
string64=$(echo —n «$string» | base64 —w 0 | tr —d ‘=’)
string64rev=$(echo —n «$string64» | rev)
echo «$string64rev»
function setuphttp () {
# Create windows install script
wget https://raw.githubusercontent.com/dinger1986/rustdeskinstall/master/WindowsAgentAIOInstall.ps1
sudo sed —i «s|secure-string|${string64rev}|g» WindowsAgentAIOInstall.ps1
# Create linux install script
wget https://raw.githubusercontent.com/dinger1986/rustdeskinstall/master/linuxclientinstall.sh
sudo sed —i «s|secure-string|${string64rev}|g» linuxclientinstall.sh
# Download and install gohttpserver
# Make Folder /opt/gohttp/
if [ ! —d «/opt/gohttp» ]; then
echo «Creating /opt/gohttp»
sudo mkdir —p /opt/gohttp/
sudo mkdir —p /opt/gohttp/public
fi
sudo chown «${uname}» —R /opt/gohttp
cd /opt/gohttp
GOHTTPLATEST=$(curl https://api.github.com/repos/codeskyblue/gohttpserver/releases/latest —s | grep «tag_name»| awk ‘{print substr($2, 2, length($2)-3) }’)
echo «Installing Go HTTP Server»
if [ «${ARCH}» = «x86_64» ] ; then
wget «https://github.com/codeskyblue/gohttpserver/releases/download/${GOHTTPLATEST}/gohttpserver_${GOHTTPLATEST}_linux_amd64.tar.gz»
tar —xf gohttpserver_${GOHTTPLATEST}_linux_amd64.tar.gz
elif [ «${ARCH}» = «aarch64» ] ; then
wget «https://github.com/codeskyblue/gohttpserver/releases/download/${GOHTTPLATEST}/gohttpserver_${GOHTTPLATEST}_linux_arm64.tar.gz»
tar —xf gohttpserver_${GOHTTPLATEST}_linux_arm64.tar.gz
elif [ «${ARCH}» = «armv7l» ] ; then
echo «Go HTTP Server not supported on 32bit ARM devices»
echo —e «Your IP/DNS Address is ${wanip}»
echo —e «Your public key is ${key}»
exit 1
fi
# Copy Rustdesk install scripts to folder
mv /opt/rustdesk/WindowsAgentAIOInstall.ps1 /opt/gohttp/public/
mv /opt/rustdesk/linuxclientinstall.sh /opt/gohttp/public/
# Make gohttp log folders
if [ ! —d «/var/log/gohttp» ]; then
echo «Creating /var/log/gohttp»
sudo mkdir —p /var/log/gohttp/
fi
sudo chown «${uname}» —R /var/log/gohttp/
echo «Tidying up Go HTTP Server Install»
if [ «${ARCH}» = «x86_64» ] ; then
rm gohttpserver_«${GOHTTPLATEST}»_linux_amd64.tar.gz
elif [ «${ARCH}» = «armv7l» ] || [ «${ARCH}» = «aarch64» ]; then
rm gohttpserver_«${GOHTTPLATEST}»_linux_arm64.tar.gz
fi
# Setup Systemd to launch Go HTTP Server
gohttpserver=«$(cat << EOF
[Unit]
Description=Go HTTP Server
[Service]
Type=simple
LimitNOFILE=1000000
ExecStart=/opt/gohttp/gohttpserver —r ./public —port 8000 —auth—type http —auth—http admin:${admintoken}
WorkingDirectory=/opt/gohttp/
User=${uname}
Group=${uname}
Restart=always
StandardOutput=append:/var/log/gohttp/gohttpserver.log
StandardError=append:/var/log/gohttp/gohttpserver.error
# Restart service after 10 seconds if node service crashes
RestartSec=10
[Install]
WantedBy=multi—user.target
EOF
)«
echo «${gohttpserver}» | sudo tee /etc/systemd/system/gohttpserver.service > /dev/null
sudo systemctl daemon—reload
sudo systemctl enable gohttpserver.service
sudo systemctl start gohttpserver.service
echo —e «Your IP/DNS Address is ${wanip}»
echo —e «Your public key is ${key}»
echo —e «Install Rustdesk on your machines and change your public key and IP/DNS name to the above»
echo —e «You can access your install scripts for clients by going to http://${wanip}:8000»
echo —e «Username is admin and password is ${admintoken}»
if [[ —z «$http» ]]; then
echo «Press any key to finish install»
while [ true ] ; do
read —t 3 —n 1
if [ $? = 0 ] ; then
exit ;
else
echo «waiting for the keypress»
fi
done
break
fi
}
# Choice for Extras installed
if [[ —z «$http» ]]; then
PS3=‘Please choose if you want to download configs and install HTTP server:’
EXTRA=(«Yes» «No»)
select EXTRAOPT in «${EXTRA[@]}»; do
case $EXTRAOPT in
«Yes»)
setuphttp
break
;;
«No»)
echo —e «Your IP/DNS Address is ${wanip}»
echo —e «Your public key is ${key}»
echo —e «Install Rustdesk on your machines and change your public key and IP/DNS name to the above»
echo — e «You can get a free API with Addressbook etc via https://github.com/infiniteremote/installer»
echo «Press any key to finish install»
while [ true ] ; do
read —t 3 —n 1
if [ $? = 0 ] ; then
exit ;
else
echo «waiting for the keypress»
fi
done
break
;;
*) echo «invalid option $REPLY»;;
esac
done
elif [ «$http» = «true» ]; then
setuphttp
elif [ «$http» = «false» ]; then
echo —e «Your IP/DNS Address is ${wanip}»
echo —e «Your public key is ${key}»
echo —e «Install Rustdesk on your machines and change your public key and IP/DNS name to the above»
echo — e «You can get a free API with Addressbook etc via https://github.com/infiniteremote/installer»
fi