一、应用场景
你是一个大学生,在宿舍有一台笔记本电脑,平时上课你觉得带电脑去教室太不方便了,所以经常只带iPad去教室,但你想要是iPad能连到宿舍的电脑就好了。或者,你是一个社畜,有时想在工位的电脑上连接到家里的台式机。或者,你只带了手机在外,临时有事要操作家里的电脑。
如果你有类似于上述的需求,本文可以帮助你在任何有互联网连接的地方,用几乎任何设备(手机、平板、电脑),使用远程桌面连接到一台处于局域网内的电脑。
二、需要准备什么
我撰写本文时,假想面对的是计算机专业的大一新生。为了能读懂本教程,你可能需要一点最基本的Linux操作系统和计算机网络的基础。除此之外,你还需要:
- 在局域网内的电脑装有Windows 10专业版,因为只有Windows 10专业版才能使用远程桌面功能。在“开始菜单 > 设置 > 系统 > 关于”中查看系统版本,如果不是专业版,可以参考微软官方文档:将 Windows 10 家庭版升级到 Windows 10 专业版,也可以自行百度如何升级到专业版。
- 一台拥有公网IP的Linux服务器,用于远程端口转发。可以在各大云服务器平台上花每月不到10元获得。一台云服务器除了远程桌面连接还可以做很多其他事情,也可以多人共用一台。
如果你的Windows 10不是专业版,或者不打算买一个服务器,可以考虑直接使用第三方的远程桌面软件。但是如果你恰好有专业版Windows 10和服务器,本文的方案无疑是更优的选择。
三、操作步骤
Step 1:启用远程桌面连接
在需要被远程连接的Windows 10电脑上:在“开始菜单 > 设置 > 系统 > 远程桌面”中启用远程桌面。这个远程桌面使用了微软的RDP协议,大部分渲染在连接设备上完成,因此流畅度比其他基于视频传输的远程桌面软件有很大提升。
然后打开命令行,输入ipconfig
找到当前局域网下的IPv4地址,记录下来,用于后续局域网内连接。
Step 2:在连接设备上安装远程桌面客户端:
在需要连接到电脑的设备上,安装一个支持RDP协议的远程桌面客户端,并且和电脑连接到同一个局域网下。对于不同系统的设备,我推荐以下的客户端App,你需要使用之前记录下来的IP地址和你登录Windows 10的Microsoft账户和密码来添加连接:
- 对于iOS/iPadOS设备,在App Store安装RD Client,这是一款微软官方推出的远程桌面连接客户端App。
- 对于MacOS设备,由于RD Client没有上架中国大陆的App Store,可以使用Parallel Client来代替。
- 对于Windows设备,直接搜索系统自带的“远程桌面连接”工具。
- 我没有用过其他平台的连接设备,但是我想应该不难找到一个支持RDP协议的远程桌面客户端。
至此,如果一切顺利,你应该能够在同一个局域网下连接到你的电脑了,接下来让你能够在互联网下都可以连接到你的电脑。
Step 3:打开服务器的防火墙
打开云服务器的控制台,在防火墙面板里添加一条规则,放通TCP协议的3389号端口,因为RDP协议默认使用3389号端口。你也可以在设置中自定义这个端口。
Step 4:配置服务器上的sshd服务
ssh登录服务器,编辑/etc/ssh/sshd_config
文件(需要root权限),将其中的#GatewayPorts no
改为yes
并去掉注释。如果你不知道怎么使用vim编辑文件,执行下面这行命令也能达到同样的效果:
sudo sed -i 's/#GatewayPorts no/GatewayPorts yes/' /etc/ssh/sshd_config
然后重启sshd服务(如果没有用可以考虑重启服务器):
sudo systemctl restart sshd
将GatewayPorts
设为yes
可以远程端口转发绑定到一个非环回地址,进而允许其他主机连接,详见sshd_config(5)
。
Step 5:使用ssh进行远程端口转发
ssh命令的-R
选项可以提供远程端口转发功能,具体命令格式如下:
ssh -NfR <服务器IP>:<服务器Port>:<本地IP>:<本地Port> <服务器用户名>@<服务器IP>
其中:
- 服务器IP为你的云服务器的公网IP
- 服务器Port为之前在防火墙中打开的端口,默认为3389
- 本地IP一般填写
localhost
- 本地Port为启用远程桌面的高级设置中指定的端口,默认为3389
- 服务器用户名为你登陆云服务器的用户名
-R
表示远程端口转发-N
表示不执行命令,只进行端口转发-f
表示将ssh放到后台执行
由于NAT的存在,我们无法直接从公网直接访问到局域网内的主机。远程端口转发需要由局域网内的主机主动发起,也就是在NAT上打洞,可以使得任何访问<服务器IP>:<服务器Port>
的请求,都会被转发到<本地IP>:<本地Port>
。这样,我们只需要访问<服务器IP>:3389
,就可以连接到本地的RDP服务了。
在需要被远程连接的电脑上执行上述命令,之后不要关闭命令行,在连接设备上,把之前的局域网IP替换为服务器的公网IP,再次尝试连接。如果一切顺利,至此,你应该能在任何有互联网连接的地方远程桌面连接到你的电脑了。但是,现在每次电脑启动后都需要手动执行ssh命令来进行远程端口转发,比较不方便,接下来,我们使得每次开机后自动执行这个命令。
Step 6:使用密钥认证免密登录SSH
自动执行远程端口转发命令的必要前提是ssh连接时无需输入密码,ssh提供了使用公私钥验证的方法来免密登录。首先在电脑上执行以下命令来生成公私钥:
ssh-keygen
执行过程中需要确认一些参数,一路回车使用默认值即可。成功执行后该命令会在~/.ssh
文件夹下生成id_rsa
文件和id_rsa.pub
文件,前者是私钥,需要妥善保管防止泄露,后者是公钥,需要保存到服务器上。可以通过执行以下命令来自动将公钥上传至服务器:
ssh-copy-id <服务器用户名>@<服务器IP>
如果你的电脑上没有ssh-copy-id
命令,可以手动将本地的~/.ssh/id_rsa.pub
文件中的内容全部追加到到服务器中的~/.ssh/authorized_keys
文件后面。如果你既没有ssh-copy-id
命令,又不会使用vim,可以在本地执行以下命令:
scp ~/.ssh/id_rsa.pub <服务器用户名>@<服务器IP>:~/
注:windows不要直接写~/.ssh/id_rsa.pub
,要写文件的具体位置
然后在服务器上执行以下命令:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
ssh尝试连接服务器时,会自动匹配~/.ssh/authorized_keys
中的公钥和你的私钥,如果成功配对,则不需要输入密码就可以连接到服务器了。
注:如果在连接中出现
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:HDjXJvu0VYXWF+SKMZjSGn4FQmg/+w6eV9ljJvIXpx0.
Please contact your system administrator.
Add correct host key in /Users/wangdong/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/wangdong/.ssh/known_hosts:46
ECDSA host key for 108.61.163.242 has changed and you have requested strict checking.
Host key verification failed.
解决问题:
ssh-keygen -R 你要访问的IP地址
解决Host key verification failed.
Step 7:创建计划任务来开机自动执行(可选)
Windows提供了“任务计划程序”来实现“当某个条件满足时自动执行一个操作”的功能。打开系统自带的“任务计划程序”,在右上角点击“创建任务”,为任务添加开机启动的触发器:
在高级设置中,延迟任务时间1分钟是为了等待系统进行网络连接,重复任务间隔5分钟是为了防止网络不稳定,或者超时导致掉线。掉线后可以自动重新连接。或者你也可以使用autossh等工具实现自动掉线重连等功能。
接下来为任务添加需要执行的操作,将之前建立远程端口转发的命令填写到“程序或脚本”和“添加参数”中:
然后,你可以在“条件”面板中设置只有当连接交流电源时且有网络连接时启用该任务,在“设置”面板中设置如果任务正在运行,则不要启动新任务,来避免每隔5分钟就重复执行导致的资源消耗。
至此,如果一切顺利,你应该可以做到在启动电脑后,不做任何操作,在任何有互联网的地方连接到你的电脑了。
四、结尾
高性能主机 + iPad + 蓝牙键鼠 + 远程桌面连接 = 随时随地可用的高性能电脑
每天起床后,按下电脑的开机键,带上iPad出门吧!
文章评论