问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

从零开始 手把手教学 CentOS7.6 部署Ngrok 并成功使用

创作时间:
作者:
@小白创作中心

从零开始 手把手教学 CentOS7.6 部署Ngrok 并成功使用

引用
CSDN
1.
https://blog.csdn.net/kong_jie123/article/details/137676277

本文将详细介绍如何在CentOS 7.6系统上部署Ngrok,包括环境准备、具体实施步骤、使用FileZilla传输文件、开启服务以及一些实用的注意事项。Ngrok是一个反向代理工具,可以将本地服务暴露到公网,方便远程访问。本文的部署过程主要参考了《手把手教你在 CentOS7 上部署Ngrok (踩坑&填坑)》,但由于版本和环境的差异,部分操作需要进行适当的调整。

一、说明和准备

为了更好地帮助小白从零开始部署,本文将所有关键配置和实际选择以黄色背景显示。

  1. 一个可用的域名(在阿里云购买),并解析到服务器公网IP(解析为nwct.域名)
  2. 一台有公网IP的服务器(国内站点,优先选择带宽,根据实时价格选择,选择腾讯云99/年 4M带宽(北京))
  3. FileZilla软件(用于传输文件,也可使用SSH、SCP等命令在CMD中操作,但不能设置密钥(使用密码))
  4. 本文的操作过程主要参考《手把手教你在 CentOS7 上部署Ngrok (踩坑&填坑)》,部分操作可以从原文获取,输入和输出结果一致。文中以《参考引文》替代,有一些细致的差异导致最终连接不上,因此记录下来。

二、实施

习惯使用腾讯云/阿里云的网页连接,因此进入后需首先查看是否为root用户(重要!!!),一般需要输入自己设置的密码才能进入到root账户,因此推荐使用第二个密码登录

如果使用一键登录也没有关系,进入后最左侧不是root,而是其他用户(如:lighthouse等自定义用户),执行su -命令输入密码

显示示例:
[lighthouse@VM-20-15-centos ~]#su -

快捷复制

su -

然后弹出Password:光标,输入你的密码回车即可,即可进入到root用户!下面的所有操作均基于此用户!

2.1 安装go环境和git环境

首先是更新软件

yum update

然后安装golang

(如果出错No package go available.请查看 《参考引文》对应部分解决,没有出错)

yum install go

然后查看go的版本

go version

返回以下类似结果即成功(版本可能随时间不一样,但不影响)

go version go1.21.5 linux/amd64

安装git环境(中间会出来输入y or n的,输入y)

yum install git

查看git版本,返回结果请参照go,有返回版本号即为成功(版本低一些无所谓,不一定非要是最新版)

git --version

2.2 安装ngrok

拉去Ngrok的源码,github地址,和国内gitee源(使用国内源,国外的超时)

git clone https://gitee.com/marchocode/ngrok

然后进入ngrok目录(Linux中目录很重要,在不同目录的指令可能不同,请随时保证目录与本文一致!!!)

cd ngrok/
mkdir ssl
cd ssl

cd 后会显示对应文件夹

显示示例:
[root@VM-20-15-centos ~]#cd ngrok/
[root@VM-20-15-centos ngrok]#mkdir ssl
[root@VM-20-15-centos ngrok]#cd ssl
[root@VM-20-15-centos ssl]#

在服务器上制作SAN证书,原因请参照《参考引文》部分

(下文中所有xx.xx.xxx都需要替换为自己的域名解析)

echo subjectAltName = DNS:"xx.xx.xxx">extfile.cnf

如如下执行

显示示例:
[root@VM-20-15-centos ssl]#echo subjectAltName = DNS:"nwct.nideyuming.top">extfile.cnf

生成证书

export NGROK_DOMAIN="xx.xx.xxx"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 5000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 5000 -out server.crt -extfile extfile.cnf

替换证书(询问时请输入y)

第一个:

cp base.pem ../assets/client/tls/ngrokroot.crt

第二个:

cp server.crt ../assets/server/tls/snakeoil.crt

第三个:

cp server.key ../assets/server/tls/snakeoil.key

然后回到上级目录(应为ngrok文件夹),生成服务端,出错make: *** [deps] Error 1请看《参考引文》

cd ../
GOOS=linux GOARCH=amd64 make release-server

成功后在结果中显示/ngrok/bin/ngrokd文件夹即成功

然后生成客户端(Windows 64位系统)文件,其他类型客户端命令请参考其他来源,如1,2

GOOS=windows GOARCH=amd64 make release-client

然后在ngrok/bin/windows_amd64目录下会生成一个ngrok.exe文件,成功

2.3 使用FileZilla连接服务器并下载文件

使用密码或者密钥连接,请搜索相关教程,使用密钥连接(腾讯云控制台生成密钥后自动关闭密码连接)

打开文件-站点管理器-创建新站点-填写信息-点击连接

选择SFTP协议,主机填写服务器公网IP,用户root,类型选择密码/密钥,如果是密钥的话请将自动下载的私钥文件添加到引用上。

连接成功后将左边打开到想要保存的本地文件夹中,右边则打开/root/ngrok/bin/windows_amd64文件夹,可以看到生成的文件ngrok.exe

将ngrok文件拖拽或者复制到左侧本地文件夹中,即可完成客户端的下载

然后需要新建配置文件为ngrok.cfg,并填写以下内容,保存,其中 remote_port值可以自己修改为任意不常用的端口值(常用的端口不要用)

server_addr: xx.xx.xxx:4443
trust_host_root_certs: false
tunnels:
    mstsc:
        remote_port: 3378
        proto:
         tcp: "127.0.0.1:3389"

在服务器控制台放行端口,放行4443(用来与内网电脑客户端建立隧道)以及自己设置的远程3378的TCP和UDP端口(外网电脑远程连接服务器该端口)

2.4 开启服务

在root的ngrod文件夹下输入如下指令启动服务端

./bin/ngrokd -domain="xx.xx.xxx" -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443

出现如下指令代表服务端开启成功,注意开启后会一直在这个进程中并不断刷新

[06:51:54 UTC 2024/03/01] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [registry] [tun] No affinity cache specified
[06:51:54 UTC 2024/03/01] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting every 30 seconds
[06:51:54 UTC 2024/03/01] [INFO] (ngrok/log.Info:112) Listening for public http connections on [::]:80
[06:51:54 UTC 2024/03/01] [INFO] (ngrok/log.Info:112) Listening for public https connections on [::]:443
[06:51:54 UTC 2024/03/01] [INFO] (ngrok/log.Info:112) Listening for control and proxy connections on [::]:4443
[06:52:24 UTC 2024/03/01] [INFO] (ngrok/log.(*PrefixLogger).Info:83) [metrics] Reporting: {"bytesIn.count":0,"bytesOut.count":0,"connMeter.count":0,"connMeter.m1":0,"httpTunnelMeter.count":0,"linux":0,"osx":0,"other":0,"tcpTunnelMeter.count":0,"tunnelMeter.count":0,"tunnelMeter.m1":0,"windows":0}

然后启动客户端,打开cmd,cd到本地电脑(被控端)的ngrok.exe所在文件夹中,输入

ngrok.exe -log=stdout -config=ngrok.cfg start mstsc

其中 -log=stdout 是输出日志到结果中,加了的话会出现日志

不加的话就会显示

上图中没有出现[Error]或下图中没有出现红色即为成功,已经可以使用外网电脑远程桌面连接进行连接了!

三、外网电脑远程桌面连接

使用外网电脑打开Windows的远程桌面连接应用,其他电脑系统也有自带的相关软件,以Windows远程桌面连接为例进行演示。输入域名:端口号,本例中为3378,以及被控端电脑的用户名

点击连接后输入账户密码即可

成功连接!

四、使用Screeen后台持续运行

在服务器上跑服务端软件的时候,当主机与服务器断开连接的时候,centos会中断程序进行,这就意味着要让程序持续运行,就必须得保持主机和服务器的连接,为了解决这个问题, screen 是个极其有用的方法

错误表现截图,如果你的错误一致,可以根据下面的教程解决

外网计算机远程连接时,长时间显示配置远程会话。

本地客户端从绿色的online变成了蓝色的connecting并一直持续

仍然在root用户的根目录

安装screen

yum install screen

使用screen运行ngrok,-S test 可以取任意名字,取得是ngrok

screen -S ngrok

在screen ngrok这个会话中,执行命令(出问题可以看五)

cd ngrok/
./bin/ngrokd -domain="xx.xx.xxx" -httpAddr=:80 -httpsAddr=:443 -tunnelAddr=:4443

然后按ctrl+a+d来从ngrok会话回到命令行

五、使用Powershell后台执行客户端程序

在windows中为了执行ngrok.exe,向上面说的一样使用cmd可以执行,但由于在于我的电脑开机过程中ngrok程序一直需要开着,而cmd窗口就得一直存在,因为cmd并没有提供挂起的功能,因此我们可以使用Powershell来实现后台挂起的操作,这样界面就会清爽一些。

首先需要在客户端执行程序和配置文件所在的文件夹里创建一个文本文件,将以下代码复制进去,保存并修改后缀名为.bat。名字是ngrok.bat。

ngrok.exe -config=ngrok.cfg start mstsc

然后在该文件夹中打开powershell,右键 open terminal或者win+R输入powershell然后cd到该文件夹,之后输入以下指令(注意引号内的内容是自己定义的文件名!)

Start-Process -WindowStyle hidden -FilePath "ngrok.bat"

示例如图:

然后就可以将powershell关掉,通过检查任务管理器可以看到ngrok已经开始运行了,然后就可以使用远程桌面连接测试了!这样的话 只要被控电脑不重启,都可以很安静的让客户端软件后台运行了。

六、一些注意事项和命令

6.1 kill掉错误进程

如果ngrokd程序自己断掉了,但其进程仍然在,因此需要先杀掉进程

查找进程号

ps -ef | grep ngrok

查找到的进程号杀掉即可

kill 2823

6.2 转移目录

cd 命令,如果出错提示没有文件夹,如果确实已经make dir了,则代表所在的文件夹不对,使用cd ../返回上一级目录,使用ls查看文件夹所有文件

cd dir
make dir
cd ../

6.3 退出程序

当程序在持续运行时,没有让我们输入的地方,如果有想进行其他操作,可以使用ctrl+C来退出当前程序回到命令行模式。

6.4 Screen操作

列出所有的screen:

screen -ls

重新连接screen,需要要连接的是detached

screen -r ngrok

删除上述列表中没有用的的screen,name为列表中的名字,格式为numid.balabala

screen -S name -X quit
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号