使用ngrok实现远程桌面连接

文章目录

    • 环境
    • 服务器 A
      • 安装 go
      • 搭建ngrok服务器
        • 拉取 ngrok
        • 生成证书:
        • 编译生成 Linux 服务端
        • 编译生成 window 客户端
        • 运行 ngrok
      • DNS解析
    • 电脑 B
      • 开启远程桌面
      • 创建配置文件
    • 电脑 C

环境

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

服务器 A

安装 go

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

前往 go 官网下载安装包

使用ngrok实现远程桌面连接_第1张图片

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实现远程桌面连接_第2张图片

DNS解析

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


电脑 B

开启远程桌面

使用ngrok实现远程桌面连接_第4张图片

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

创建配置文件

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

使用ngrok实现远程桌面连接_第5张图片

编辑 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实现远程桌面连接_第6张图片

连接成功


电脑 C

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

使用ngrok实现远程桌面连接_第7张图片

使用ngrok实现远程桌面连接_第8张图片

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

你可能感兴趣的:(ubuntu)