欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用ngrok实现远程桌面连接

程序员文章站 2024-03-18 17:06:40
...

环境

  • 服务器 A:ubuntu 16.04(具有固定IP的服务器)
  • 电脑 B:windows 7(被远程的电脑)
  • 电脑 C:windows 10(远程的电脑)
  • 本文中使用的域名为 ngrok.example.com,需要根据自身情况替换为自己的域名

服务器 A

安装 go

ngrok 是基于 go 语言开发的,因此需要先在服务器 A 上安装 go

前往 go 官网下载安装包

使用ngrok实现远程桌面连接

cd ~
wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
tar -C /usr/local -zxvf go1.12.7.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin  # 配置环境路径
go version  # 验证安装

显示

go version go1.12.7 linux/amd64

安装成功

注意:不要使用 apt 的方式来安装 go,不然编译时可能会因为go语言版本较低会产生像下面这样的错误

package context: unrecognized import path "context" (import path does not begin with hostname)
package net/http/httptrace: unrecognized import path "net/http/httptrace" (import path does not begin with hostname)
Makefile:8: recipe for target 'deps' failed
make: *** [deps] Error 1

如果已经通过apt 安装,可以通过下面方法来卸载

go env  # 查看go安装的位置
apt remove golang
apt autoremove
rm -r go安装的位置

搭建ngrok服务器

拉取 ngrok

git clone https://github.com/inconshreveable/ngrok.git
cd ngrok

使用ngrok.com官方服务时,我们使用的是官方的SSL证书。自己建立ngrok服务,需要我们生成自己的证书,并提供携带该证书的ngrok客户端。首先指定域名:

export NGROK_DOMAIN="ngrok.example.com"

生成证书:

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

我们在编译可执行文件之前,需要把生成的证书分别替换到 assets/client/tlsassets/server/tls中,这两个目录分别存放着 ngrok 和 ngrokd 的默认证书。

cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key

编译生成 Linux 服务端

make release-server  # 会在 ngrok/bin/ 目录下生成 go-bindata 和 ngrokd 这个文件

编译生成 window 客户端

GOOS=windows GOARCH=amd64 make release-client  # 会在 ngrok/bin/windows_amd64/ 目录下生成 ngrok.exe 这个文件

运行 ngrok

bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="ngrok.example.com" -httpAddr=":6060" -httpsAddr=":6061"

其中 httpAddr=":6060" 是内网的http穿透出来,外网对应的端口
同样 httpsAddr=":6061" 是内网的https穿透出来,外网对应的端口
二者都可以自定义

使用ngrok实现远程桌面连接

DNS解析

设置 A 解析,将 ngrok.example.com 解析到 服务器 A 的 IP 上
使用ngrok实现远程桌面连接


电脑 B

开启远程桌面

使用ngrok实现远程桌面连接

要是该电脑未设置密码,需要到 控制面板\用户帐户和家庭安全\用户帐户 中设置一个复杂一点的密码

创建配置文件

将服务器A中刚才生成的 ngrok.exe 文件下载下来,并在同一个目录下新建 ngrok.cfgngrok.bat 两个文件。

使用ngrok实现远程桌面连接

编辑 ngrok.cfg

server_addr: "ngrok.example.com:4443"
trust_host_root_certs: false
tunnels:
  mstsc:
    remote_port: 50123
    proto:
      tcp: "127.0.0.1:3389"

remote_port可以随意指定

编辑 ngrok.bat

ngrok.exe -config=ngrok.cfg start mstsc

双击 ngrok.bat

使用ngrok实现远程桌面连接

连接成功


电脑 C

创建远程桌面连接,输入刚才设置好的电脑 B 的密码

使用ngrok实现远程桌面连接

使用ngrok实现远程桌面连接

连接成功,只是由于服务器 A 是在美国,所以连接时间很长,搭在国内会比较好