[工欲善其事,必先利其器] - 使用RustDesk自建服务器实现远程桌面
什么是RustDesk?
RustDesk是一款免费开源的远程桌面软件。它跨平台,支持Windows、MacOS和Linux。它非常容易使用,界面友好。其最大的特点是支持自建服务器 。您可以构建自己的服务器并使用它来连接远程计算机。这对于那些想要控制远程计算机但又不想使用公共服务器的人来说非常有用。当然了,你也可以使用公共服务器,无非就是慢一些。
原文
原文可以参考我的博客(欢迎大家去Github打个星,不错的个人博客模板,中英文切换,日夜间切换)
我的写作参考了下面的博客,向作者致敬!
不啰嗦,下面进入正题。
客户端的安装和使用
本文重点在于自有服务器的配置,对于客户端的安装和使用请参考官方网站和文档。
下载见官网:
文档见:
前置条件
本文假设您已经拥有一个属于自己的拥有独立IP的服务器,最好是Linux的。如果没有,最好先去搞一台。
以下正文。
远程连接服务器
如果您用windows,推荐使用MobaXterm,Putty,如果您用Mac或者Ubuntu,推荐使用Termius。当然了,使用系统自带的默认终端也问题不大,稍微麻烦点。SSH连接这里不再讲解,如果不会请自己搜索相关教程。
为RustDesk创建一个目录
对于我的情况,我在根目录`/`下创建了一个名为`RUSTDESK-Sever`的目录。要做到这一点,请运行以下命令:
# 进入根目录(非必须)
cd /
# 创建文件夹(名字随意)
mkdir RUSTDESK-Sever
# 进入该文件夹
cd RUSTDESK-Sever
下载RustDesk服务器
在发布页面:
下载服务器对应的版本。选择对应版本,右键复制地址。回到SSH回话,在刚刚的目录中使用wget下载文件
wget <下载链接>
例如
wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.9/rustdesk-server-linux-amd64fb.zip
使用unzip解压,如果没有安装unzip先安装一下。
sudo apt-get install unzip
然后解压
unzip rustdesk-server-linux-amd64.zip
解压后会看到一个叫`amd64`的文件夹,我们给它改个名。
mv amd64 RustDesk
#进入该文件夹
cd RustDesk
使用Screen运行RustDesk服务器
什么是Screen
Screen是一个可以在远程计算机上运行的终端复用程序。它允许您在远程计算机上运行多个终端会话,并在断开SSH连接后继续运行这些会话。这对于在远程计算机上运行长时间运行的程序非常有用。
安装Screen
sudo apt-get install screen
使用tree查看文件夹内的内容和结构
首先安装
sudo apt-get install tree
然后使用
sudo tree
然后你会看到这样的结果:
RustDesk
├── hbbr
├── hbbs
└── rustdesk-utils
运行Screen以及RustDesk服务器
现在,我们可以运行两个Screen会话,一个用于中继服务器,另一个用于信令服务器。
screen -R hbbr
然后,我们使用以下命令运行中继服务器:
./hbbr
然后我们可以看到一些输出,意味着中继服务器正在运行。然后按下`Ctrl+A`,然后按下`D`,以断开Screen会话。
然后,我们可以运行另一个Screen会话,用于信令服务器。
screen -R hbbs
然后,我们使用以下命令运行信令服务器:
./hbbs
然后看,我们可以看到一些输出,意味着信令服务器正在运行。然后按下`Ctrl+A`,然后按下`D`,以断开Screen会话。
我们可以查看Screen会话的状态:
screen -ls
然后你会看到类似这样的结果:
There are screens on:
12345.hbbs (Detached)
12345.hbbr (Detached)
2 Sockets in /run/screen/S-root.
复制公钥用于客户端配置
现在我们可以查看内容,使用`tree`:
sudo tree
然后你会看到类似这样的结果:
.
├── RustDesk
│ ├── db_v2.sqlite3
│ ├── db_v2.sqlite3-shm
│ ├── db_v2.sqlite3-wal
│ ├── hbbr
│ ├── hbbs
│ ├── id_ed25519
│ ├── id_ed25519.pub
│ └── rustdesk-utils
└── rustdesk-server-linux-amd64.zip
公钥文件是`id_ed25519.pub`。我们可以使用以下命令查看公钥文件的内容:
cat id_ed25519.pub
或者
more id_ed25519.pub
复制公钥文件的内容,我们将在客户端配置中使用它。
防火墙配置
在你的云服务提供商的控制面板中,打开防火墙配置,放行以下端口:
- 21115 for TCP
- 21116 for TCP & UDP
- 21117 for TCP
- 21118 for TCP
- 21119 for TCP
必要的话,还要在你的云服务器操作系统中放行以上端口。
客户端配置
需要准备的信息:
- 服务器IP地址
- 服务器公钥
假设你已经安装好了RustDesk客户端。如果没有,请参考[官方文档](https://rustdesk.com/docs/)。
打开RustDesk客户端,在左侧电脑ID一项最右边的三个点,点击它,选择网络设置。
- ID服务器地址:<你的服务器IP>
- 中继服务器地址:<你的服务器IP>
- API服务器地址:可以留空
- 秘钥:粘贴你的服务器公钥
以上的过程在主控端和被控端都要进行。
在主控端,输入被控端的ID,点击连接,然后输入被控端的密码,点击确定,就可以连接到被控端了。
到目前位置,我们已经实现了自建服务器使用RustDesk的目标。但是目前的配置还不够优雅,我们还需要做一些额外的配置。
将运行RustDesk服务器配置为系统服务
我们这样做的原因在于,我们不想每次重启服务器时都要手动运行RustDesk服务器。
有两种方式可以实现这一目标:
1. 使用pm2
2. 使用systemd
(I)pm2
我个人没有使用pm2,但是如果你想使用pm2,可以参考以下步骤:
首先安装nodejs 和 npm:
sudo apt-get install nodejs npm
然后安装pm2:
sudo npm install pm2 -g
然后运行以下命令启动RustDesk服务器:
pm2 start hbbr
pm2 start hbbs
然后运行以下命令将pm2配置为系统服务:
pm2 startup
(II)systemd
我个人使用systemd,如果你想使用systemd,可以参考以下步骤:
[hbbs]
首先,我们需要创建一个名为`RustDeskHbbs.service`的文件,位于`/usr/lib/systemd/system/`目录下:
sudo vim /usr/lib/systemd/system/RustDeskHbbs.service
然后把以下信息复制到这个文件中:
`<...>` 中的内容请根据你个人情况进行修改。
[Unit]
Description=RustDesk Hbbs
After=network.target
[Service]
User=<your user name>
Type=simple
WorkingDirectory=<directory where you put RustDesk Server>
ExecStart=<directory where you put RustDesk Server>/hbbs
ExecStop=/bin/kill -TERM $MAINPID
[Install]
WantedBy=multi-user.target
[hbbr]
首先,我们需要创建一个名为`RustDeskHbbr.service`的文件,位于`/usr/lib/systemd/system/`目录下:
sudo vim /usr/lib/systemd/system/RustDeskHbbr.service
然后把以下信息复制到这个文件中:
`<...>` 中的内容请根据你个人情况进行修改。
[Unit]
Description=RustDesk Hbbr
After=network.target
[Service]
User=<your user name>
Type=simple
WorkingDirectory=<directory where you put RustDesk Server>
ExecStart=<directory where you put RustDesk Server>/hbbr
ExecStop=/bin/kill -TERM $MAINPID
[Install]
WantedBy=multi-user.target
然后运行以下命令启动RustDesk服务器:
sudo systemctl start RustDeskHbbs
sudo systemctl start RustDeskHbbr
或者重载systemd配置:
sudo systemctl daemon-reload
启用强制加密
重新打开`/usr/lib/systemd/system/RustDeskHbbs.service`,修改以下内容ExecStart所在行:
[Unit]
Description=RustDesk Hbbs
After=network.target
[Service]
User=<your user name>
Type=simple
WorkingDirectory=<directory where you put RustDesk Server>
ExecStart=<directory where you put RustDesk Server>/hbbs -k _
ExecStop=/bin/kill -TERM $MAINPID
[Install]
WantedBy=multi-user.target
重新打开`/usr/lib/systemd/system/RustDeskHbbr.service`,修改以下内容ExecStart所在行:
[Unit]
Description=RustDesk Hbbr
After=network.target
[Service]
User=<your user name>
Type=simple
WorkingDirectory=<directory where you put RustDesk Server>
ExecStart=<directory where you put RustDesk Server>/hbbr -k _
ExecStop=/bin/kill -TERM $MAINPID
[Install]
WantedBy=multi-user.target