远程桌面教学 · 从部署到认证

两章实战课:第一章用 1.xisi.chat 的真实上线过程讲解「一个网页如何从本地到线上」;第二章拆解远程桌面链路中的三层身份认证。两章都配逐步动画演示。

第一章为 2026-10-03 实际部署记录(含为什么本次不走 git 开工/收工拉推的机制判断);第二章内容同 1.xisi.chat 原页面。

01

第一章 · 网站部署上线全流程

一个网页从本地到线上要过五道关:流程判断 → DNS → 上传 → 站点配置 → 证书与验证。以 1.xisi.chat 实战为例

它讲什么

上一轮「为什么没走 git 开工/收工拉推」的完整答案,就是这条链:先判断任务类型,再决定走 git 开发流水线还是页面直传部署。

为什么这次不走 git 拉推

  • git 开工/收工只同步 .deploy\ 安装器源文件(bat / ps1 / register.sh / README 等)
  • 本页是新交付的独立站点页面,不在仓库文件清单里,本次无任何仓库变更
  • 与 kanban / jizhang / music 同线:页面直传 + 配站点,不经过 git

关键参数(本次实况)

域名 / 目录1.xisi.chat → /www/wwwroot/1/
上传工具xisi-ssh.py(paramiko SFTP)
站点配置/www/server/panel/vhost/nginx/1.xisi.chat.conf
证书Let's Encrypt ECC,acme.sh 自动续期
验证命令curl -w '%{http_code}' http(s)://1.xisi.chat/
失败排查:404 → 站点配置未生效或文件未上传;000 → 证书或 443 未就绪;无 301 跳转 → conf 缺 80 端口块。
本地页面 index.html 自包含单文件 DNS 1.xisi.chat → 101.42.135.242 服务器目录 /www/wwwroot/1/ web 根目录 nginx 站点 1.xisi.chat.conf 80→443 + SSL 证书 Let's Encrypt ECC 自动续期 非 .deploy\ 安装器文件 → 不走 git 开工/收工 浏览器访问 https://1.xisi.chat/ — —
  1. 1
    页面生成交付物为自包含单文件 HTML(42018 字节,无外部依赖)
  2. 2
    流程判断:为什么不走 git非 .deploy\ 安装器源文件、无仓库变更 → 走页面直传,不做开工/收工拉推
  3. 3
    DNS 解析确认1.xisi.chat → 101.42.135.242(A 记录已生效,getent 验证)
  4. 4
    上传服务器SFTP 上传 index.html 到 /www/wwwroot/1/,md5 与本地一致
  5. 5
    nginx 站点配置写 conf:80→443 跳转 + SSL + /.well-known/ 续期路径;nginx -t 通过后 reload
  6. 6
    签发证书acme.sh --issue --ecc(Let's Encrypt)→ install-cert 到宝塔证书目录
  7. 7
    端到端验证http 301 → https 200,页面标题正确,证书链可信(ssl_verify_result=0)
  8. 8
    上线完成https://1.xisi.chat/ 可访问,本页即部署产物
1 / 8

全链路与数据流

浏览器noVNC 前端
nginxHTTPS 入口 + 认证①:443
websockifyWebSocket → TCP:6081 WPORT
隧道出口SSH 反向隧道:7002 TPORT
TightVNC桌面服务:5900
数据流:画面 / 键鼠(全程加密) 隧道建立方向:被控端主动拨号 → 服务器 每台电脑 = 独立子域 + 独立 WPORT / TPORT + 独立 websockify 实例

三层认证速览

层验证什么机制凭据与位置失败表现
① 网页认证 访问这个域名的人 HTTP Basic Auth:nginx access_by_lua_block 内置 Base64 解码校验 账号 admin / xisi2026(大小写不敏感),存于服务器 nginx 配置 页面直接 401,打不开
② SSH 密钥认证 拨号进来的这台电脑 非对称加密:客户端私钥签名,服务器用公钥验签 私钥在目标电脑 %USERPROFILE%\.xisi-remote\;公钥在服务器 /root/.ssh/authorized_keys 隧道建不起来,页面一直「连接中」
③ VNC 桌面认证 能否进入这个桌面 DES 挑战应答:16 字节挑战 → 密码补 0 至 8 字节并位反转作密钥 → 加密响应 桌面密码 xisi2026(上限 8 位),存于目标电脑 TightVNC 配置 画面出现后提示密码错误
01

网页认证 · HTTP Basic Auth

第一道门:验证「人能否访问这个域名」——在服务器 nginx 上完成,与你的电脑无关

它在验证什么

浏览器与服务器之间的第一道关卡。没有这道认证,任何人知道域名都能打开登录页发起连接。

实现位置

  • nginx access_by_lua_block 内置校验,不走独立的认证服务
  • 凭据是 HTTP 头里的 Authorization: Basic base64(账号:密码)
  • 账号 admin / xisi2026,大小写不敏感

免认证路径

  • /websockify:WebSocket 升级请求放行(否则代理建不起来)
  • /.well-known/:Let's Encrypt 证书验证放行

关键参数

校验方式Base64 解码后比对,Lua 内置
认证失败响应HTTP 401 + WWW-Authenticate: Basic
放行路径/websockify、/.well-known/
失败排查:页面 401 打不开 → 账号密码错误;页面 404 → 服务器注册未完成,需重跑注册脚本。
浏览器 输入网址 https://<前缀>.xisi.chat nginx :443 HTTPS lua 内置认证 401 拒绝 放行 — —
  1. 1
    发起请求浏览器输入网址,请求头里没有任何身份信息
  2. 2
    服务器要求认证nginx 发现没有 Authorization 头,返回 401,并告知认证方式为 Basic
  3. 3
    浏览器弹出登录框输入 admin / xisi2026(大小写不敏感)
  4. 4
    携带凭据重发Authorization: Basic base64(admin:xisi2026)
  5. 5
    lua 解码校验nginx 用 Lua 内置逻辑解码 Base64 并比对账号密码
  6. 6
    通过,放行校验通过 → 200 OK,页面与后续代理正常放行
  7. 7
    两条免认证路径/websockify 与 /.well-known/ 直接放行,不参与认证
  8. 8
    失败分支密码错误 → 401 打回;账号大小写不敏感
1 / 8
02

SSH 密钥认证 · 非对称加密

第二道门:验证「拨号进来的这台电脑」——被控端先建隧道,之后才有画面可看

它在验证什么

目标电脑开机后主动连接服务器建立反向隧道。服务器必须确认:来的确实是授权过的电脑,而不是随便一台机器在冒充。

为什么不用密码

  • 密码会泄漏、可被爆破,且无法证明"机器身份"
  • 密钥对是成对的:私钥签名、公钥验签,方向不可反
  • 算法为 ed25519,私钥固化在 %USERPROFILE%\.xisi-remote\

关键参数

私钥位置xisi_deploy_key 或 id_ed25519_2xisi
公钥位置服务器 /root/.ssh/authorized_keys
未授权行为BatchMode=yes 立即失败,不挂起等密码
隧道保活ServerAliveInterval=15 / CountMax=3
自检命令ssh-keygen -y -f <key> 须输出 ssh- 开头
失败排查:一直「连接中」→ 服务器 ss -tln | grep <TPORT> 无监听即隧道未建;公钥未授权 → 追加到 authorized_keys 后重跑。
目标电脑 私钥(签名) xisi_deploy_key ed25519 服务器 sshd 公钥(验签) authorized_keys :22 登录口 挑战 签名响应 反向隧道 7002 监听生效 · 心跳保活 — —
  1. 1
    发起连接开机自启:ssh -R 7002:127.0.0.1:5900 连接服务器 :22
  2. 2
    服务器发挑战服务器回传随机数 nonce,向客户端索要身份证明
  3. 3
    私钥签名客户端用私钥对挑战签名——签名只有私钥能产生
  4. 4
    公钥验签服务器从 authorized_keys 取公钥验签,通过即确认是本机
  5. 5
    隧道生效验签通过 → 7002 端口开始监听,反向隧道建立并保活
  6. 6
    失败:公钥未授权BatchMode=yes 立即失败,不挂起等密码输入
  7. 7
    失败:私钥损坏ssh-keygen -y -f 自检输出非 ssh- 开头 → 删除残留重解压
1 / 7
03

VNC 桌面认证 · DES 挑战应答

第三道门:验证「能否进入这个桌面」——发生在画面出现之前,目标电脑本机完成

它在验证什么

数据穿过隧道到达目标电脑的 5900 端口后,VNC 协议在显示桌面之前先做一次加密握手,确认操作者知道桌面密码。

机制要点

  • 先做 RFB 003.008 版本握手,再宣布安全类型 VNC Auth (2)
  • 服务器发 16 字节随机挑战,客户端用密码加密后回传
  • 密码上限 8 位:补 0 至 8 字节,逐位反转后作为 DES 密钥
  • 校验通过返回 4 字节大端结果:1 = OK

关键参数

默认桌面密码xisi2026(可 -VncPass 指定)
加密算法DES-ECB,VNC 位反转密钥
自检返回端到端认证通过 → PASS
改密方式TightVNC 服务配置 GUI 或重跑 MSI Change
失败排查:提示密码错误 → 与安装时不一致,按 README 改密;「连接中」卡住则是第 ② 层隧道问题,不是这一层。
RFB 客户端 数据经隧道到达 noVNC TightVNC Server :5900 监听本机 桌面密码 xisi2026 16 字节挑战 加密响应 DES-ECB 加密盒 密码补 0 至 8 字节 → 逐位反转 作为 DES 密钥加密挑战 — —
  1. 1
    数据到达,版本握手隧道把数据送到 5900,RFB 003.008 协议握手
  2. 2
    宣布安全类型服务器给出可选安全类型:VNC Auth (2)
  3. 3
    发出挑战服务器生成 16 字节随机挑战发给客户端
  4. 4
    准备 DES 密钥取桌面密码,补 0 至 8 字节、逐位反转,作为 DES 密钥
  5. 5
    加密响应回传客户端用 DES-ECB 加密挑战,把响应发回服务器
  6. 6
    校验结果服务器校验 → 返回 4 字节大端结果:1 = OK
  7. 7
    进入桌面 / 失败端到端自检 PASS → 显示桌面;密码不对 → 提示密码错误
1 / 7
AI 讲师真人数字人
AI
AI 讲解员
跟随演示逐步讲解
中文语音 · 可静音
点击任意演示的「讲解」按钮,或下方「开始讲解」,我会逐条讲完每一步。
1.0×