前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转Lighthouse】远程桌面RDP+动态口令

【玩转Lighthouse】远程桌面RDP+动态口令

原创
作者头像
Super2022
修改2022-04-12 16:54:54
2.8K1
修改2022-04-12 16:54:54
举报
文章被收录于专栏:小确幸小确幸

一 、 选用Lighthouse的docker基础镜像环境

二、 docker-compose安装部署NPS和反向代理管理Nginx Proxy Manager

代码语言:javascript
复制
version: "3"
services:
# nginx proxy manager反向代理管理
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    container_name: npm
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "password"
      DB_MYSQL_NAME: "npm"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./nginx-proxy-manager/data:/data
      - ./nginx-proxy-manager/letsencrypt:/etc/letsencrypt
    depends_on:
      - db
    networks:
      - public_access
      - database_only
  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    container_name: npm-db
    environment:
      MYSQL_ROOT_PASSWORD: 'root-password'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'password'
    volumes:
      - ./nginx-proxy-manager/data/mysql:/var/lib/mysql
    networks:
      - database_only
#-------------------------------------------------------------------------------

#内网穿透 nps
  nps:
    image: ffdfgdfg/nps 
    container_name: nps
    expose:
      - '8044'# NPS管理界面的端口
    ports:
      - '8024:8024' # NPS通讯端口
      - '7001:7001' # 远程桌面RDP端口
    volumes:
      - './nps/conf:/conf'
    networks:
      - public_access
networks:
  public_access: # 自定义外部网络,默认bridge
  database_only: # Provide the communication between ttrss and database only
    internal: true

先拷贝NPS官网配置conf文件夹全部内容将其放在服务器的nps/conf文件夹里面,再修改其中的nps.conf 的这几项

代码语言:javascript
复制
web_host=自己设置的二级域名
web_username=admin
web_password=password
auth_crypt_key =16位的密码用于加密
public_vkey= #留空,表示关闭客户端配置文件连接模式

再用 sudo docker-compose up -d 运行该docker-compose文件

ps:必须有的配置文件如下

同时,在Lighthouse中防火墙放行相对应的端口,此处放行所有的port端口,即80,81,443,8024,7001端口

三、Nginx Proxy Manager的设置

公网IP:81登录Nginx-Proxy-Manager的管理界面,进行如下的设置:

1. 用DNS challenge申请泛域名SSL证书

DNSPod控制台 中 创建DNSPod Token密钥,获取得到 ID 和Token

在Nginx-Proxy-Manager的SSL申请中,假设域名为abc.com,则先在Domain Names 填入 *.abc.com再填入DNSPod控制台得到的 ID和 Token

2.添加Proxy Host记录并启用Https

以Nginx-Proxy-Manager为例,由前面可知,docker-compose中Nginx-Proxy-Manager的容器名为npm,管理端口号为81

反向代理设置
反向代理设置
SSL添加
SSL添加

测试一下域名npm.abc.com能否访问Nginx-Proxy-Manager的管理界面,可以的话,以同样的步骤继续设置nps的反向代理

PS:域名能够访问的话,为了安全起见,此时,可以将防火墙的端口启用限制IP来源为服务器的公网IP,这样就不能直接通过公网IP:端口,只能通过域名访问了

以81端口为例子:

四、NPS的设置

1. 内网原理

外网机器不能直接连接内网机器,但是内网机器可以上网访问服务器,因此,外网机器可以通过服务器连接上内网机器。

2. 新建客户端

客户端管理中点击+新增一个客户端,再点击生成客户端的加号获取客户端命令

ID为客户端的唯一标识码,后面还会用到

3. 新建隧道

选择TCP隧道,填写以下三项:

客户端ID、服务端端口、目标端口(Window RDP一般为3389)

建立隧道后,可以通过公网IP:服务端端口 访问内网机器了

五、内网机器的设置

1. 将NPS配置成为系统服务

配置成系统服务的出发点 如果你的 Windows 程序需要在后台长期运行,而且你希望它在开机后用户登录之前就自动运行、且在用户注销之后也不停止,那么你需要将程序注册为一个系统服务。

客户端管理 中点击 客户端 左边的加号可以获取客户端启动的命令,使用nps中的npc.exe

Window系统中的启动命令行如下:

代码语言:javascript
复制
npc -server=[二级域名]:[nps配置文件里面的bridge_port] -vkey=[系统自动生成的唯一验证密钥] 

nps自带可以注册到系统服务(开机启动、守护进程)

可以注册运行npc的批处理如下:

代码语言:javascript
复制
:: 开始获取管理员权限——先尝试在系统目录下临时新建一个文件夹,若已获取管理员权限或是运行在XP等不需要管理员权限的老系统时,是可以新建成功的,此时只需删除这个临时新建的文件夹就好了,否则通过创建一个临时vbs脚本获取管理员权限,然后再删除这个临时vbs脚本文件。
setlocal
set uac=~uac_permission_tmp_%random%
md "%SystemRoot%\system32\%uac%" 2>nul
if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
    echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
    echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
    echo WScript.Quit >>"%temp%\%uac%.vbs"
    "%temp%\%uac%.vbs" /f
    del /f /q "%temp%\%uac%.vbs" & exit )
endlocal
:: 完成获取,下面可以开始写你自己的代码了


:: 跳到bat所在的文件夹
cd /d %~dp0
:: 注意&&与&不同
cmd /k "npc.exe install -server=[公网IP或者二级域名]:[nps配置文件里面的bridge_port] -vkey=[系统自动生成的唯一验证密钥] -type=tcp & npc.exe start"

2. 安装动态口令实现安全访问

实现远程控制的安全访问大概有两种方式: 1. 限制访问源,牺牲便捷;例如:需要在访问者和被访问者设备上都需要配置穿透软件 2. 二次认证:本地密码+动态口令(推荐)

Window系统可以利用multiOTP Credential Provider动态口令

  1. 访问multiOTP Credential Provider,下载最新版本的软件包(包名为multiOTPCredentialProvider-版本号.zip,multiOTPCredentialProvider-unregister.reg为卸载该软件的工具)

2.解压软件包,并运行(可能提示需要运行环境——https://aka.ms/vs/16/release/vc_redist.x64.exe

  1. 以 Windows 管理员权限运行下列命令,产生远程桌面用户的动态口令种子(一张PNG格式的二维码图片)
代码语言:javascript
复制
#创建一个OTP账户(windows系统中必须有你创建的账户)
./multiotp.exe -fastcreatenopin <用户名>

#建立administrator对应的二维码图片(用手机扫码绑定,获取OPT动态码)
./multiotp.exe -qrcode <用户名>  <二维码图片名称.png>

4.打开二维码图片,并使用手机上的动态口令APP扫描添加动态口令令牌。动态口令APP可以使用Aegis Authenticator

ps:添加动态口令令牌以后就可以删除二维码图片,也可以不删除

六、远程桌面的设置

选择二级域名:端口号,连接后需要内网机器的登录账号和密码,登录成功后,还需要输入手机的动态口令方可进行远程操作操作

参考链接:

Nginx Proxy Manager

腾讯云 DNS 验证

NPS官网

multiOTP Credential Provider

linux的动态口令可以参考How to set up two-factor authentication in Linux

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 、 选用Lighthouse的docker基础镜像环境
  • 二、 docker-compose安装部署NPS和反向代理管理Nginx Proxy Manager
  • 三、Nginx Proxy Manager的设置
    • 1. 用DNS challenge申请泛域名SSL证书
      • 2.添加Proxy Host记录并启用Https
      • 四、NPS的设置
        • 1. 内网原理
          • 2. 新建客户端
            • 3. 新建隧道
            • 五、内网机器的设置
              • 1. 将NPS配置成为系统服务
                • 2. 安装动态口令实现安全访问
                • 六、远程桌面的设置
                • 参考链接:
                相关产品与服务
                轻量应用服务器
                轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档