基于FRP + ttyd 的远程Web终端控制:无SSH环境下的救急方案

      • 一、背景:当远程访问陷入困境时
      • 二、方案:FRP内网穿透 + ttyd Web终端
      • 三、操作步骤详解(Linux环境)
        • 0. 前提条件
        • 1. 在被控服务器上创建工作目录
        • 2. 下载必要的软件
        • 3. 生成配置文件
        • 4. 复制文件到控制端
        • 5. 在被控服务器上启动服务
        • 6. 在控制端电脑上启动访问者
        • 7. 在控制端电脑上访问Web终端
      • 四、关键要点与注意事项

一、背景:当远程访问陷入困境时

想象一下:你需要管理一台远在千里之外的Linux服务器,但它的SSH服务突然罢工了,无法连接。更糟的是,你尝试安装像向日葵这样的图形化远程工具也失败了(可能是网络限制、依赖问题或权限原因)。这时,你急需一个轻量级、无需复杂安装、且能绕过SSH问题的远程控制方案。

为什么需要这个方案?

  • SSH故障是常见问题: 配置错误、端口被封、服务崩溃、密钥问题都可能导致SSH连接失败。
  • 图形工具依赖性强: VNC、向日葵等工具需要特定的桌面环境或复杂依赖,在最小化安装的服务器或受限环境下容易安装失败。
  • 紧急恢复需求: 当服务器失联时,需要一种快速建立“生命线”的方法进行诊断和修复。

二、方案:FRP内网穿透 + ttyd Web终端

这里的方案是:

  1. FRP (Fast Reverse Proxy - 快速反向代理):
    • 是什么? 一个专注于内网穿透的高性能反向代理应用。它能将内网(或受限制网络)中的服务(如我们即将启动的Web终端)安全地暴露到公网服务器(FRPS),让外部的客户端(FRPC)能够访问。它解决了服务器本身无法直接被公网访问的问题。
    • 为什么用它? 它轻量、配置灵活、支持多种协议(这里用STCP),且能有效绕过防火墙/NAT限制。
  2. ttyd (Terminal To Web - 终端转Web):
    • 是什么? 一个能将任何命令行终端(如bash即时转换成网页的工具。运行ttyd后,它会启动一个Web服务器,你只需在浏览器中打开一个特定的URL,就能看到一个功能完备的终端界面,直接在网页里输入命令操作服务器。
    • 为什么用它? 无需安装任何客户端软件(只需浏览器),完全基于Web,极其适合在SSH不可用时作为替代控制台。它本身只提供本地访问(localhost:8081),需要FRP将其“带”到公网。

核心思想:

  1. 在被控服务器(Server)上运行ttyd,创建一个本地Web终端(监听127.0.0.1:8081)。
  2. 使用FRP的STCP (Secure TCP) 模式,在Server端运行FRP客户端(frpc)将本地的ttyd服务安全地“注册”到公网的FRP服务器(FRPS)。
  3. 在你自己的电脑(控制端/Client)上也运行一个FRP客户端(frpc),作为“访问者”(visitor),连接到FRPS并请求访问Server注册的ttyd服务。
  4. FRPS在Server的frpc和Client的frpc之间建立一条点对点(P2P)的安全隧道
  5. 控制端(Client)的frpc在本地(0.0.0.0:9999)打开一个端口,将这个端口映射到Server上的ttyd服务。
  6. 最后,你在控制端的浏览器里访问http://<控制端自己电脑的IP>:9999,就能看到并操作Server上的命令行终端了!数据流经安全的FRP隧道。

数据流简化图:

[你的浏览器] (访问 http://localhost:9999)|V
[控制端电脑] (运行 frpc_visitor, 监听 :9999)  <---(STCP安全隧道)---> [公网FRP服务器 (FRPS)]|                                                              |V                                                              V
[数据加密传输]                                                     [数据加密传输]|V[被控服务器] (运行 frpc 注册服务)|V[被控服务器] (运行 ttyd, 提供真实的 bash 终端 :8081)

三、操作步骤详解(Linux环境)

0. 前提条件
  • 一台公网可访问的服务器运行FRP服务端 (FRPS): 这是整个方案的“中转站”。你需要提前在公网服务器(如VPS)上安装并配置好FRPS(frpsfrps.ini)。本文重点在被控端和控制端配置,FRPS的安装配置请参考FRP官方文档。
  • 知道公网FRP服务器的IP地址和监听端口(通常7000)。
  • 被控服务器和控制端电脑都需要能访问互联网。
1. 在被控服务器上创建工作目录
mkdir /opt/remote_webtty
cd /opt/remote_webtty
2. 下载必要的软件
# 下载 FRP 客户端 (frpc) 压缩包 (替换版本号0.42.0为最新稳定版,注意架构amd64/arm64)
wget -O frp_0.42.0_linux_amd64.tar.gz https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz# 解压 FRP 压缩包
tar -xf frp_0.42.0_linux_amd64.tar.gz# 下载 ttyd 可执行文件 (替换版本号1.6.0和架构x86_64为最新版)
wget -O ttyd  https://github.com/tsl0922/ttyd/releases/download/1.6.0/ttyd_linux.x86_64# 给 ttyd 文件添加可执行权限
chmod 777 ttyd

为什么下载这些? frpc用于连接公网FRPS并注册服务。ttyd是将终端变成网页的核心工具。我们下载的是预编译好的二进制文件,避免了编译依赖问题。

3. 生成配置文件

关键: 设置你的公网FRP服务器的地址和端口。

# 设置环境变量:你的公网FRP服务器的IP或域名 和 端口
export FRP_SERVER="your_frp_server_ip_or_domain"  # 替换成你的实际地址
export FRP_PORT="port"                           # 替换成你的FRPS端口# 生成被控服务器使用的 frpc 配置文件 (frpc_srv.ini)
cat > frpc_srv.ini <<-EOF
[common]
server_addr = $FRP_SERVER
server_port = $FRP_PORT[webtty]
type = stcp
sk = your_secret_key
local_ip = 127.0.0.1
local_port = 8081
EOF# 生成控制端使用的 frpc 访问者配置文件 (frpc_client.ini)
cat > frpc_client.ini <<-EOF
[common]
server_addr = $FRP_SERVER
server_port = $FRP_PORT[webtty_visitor]
type = stcp
role = visitor
server_name = webtty
sk = your_secret_key
bind_addr = 0.0.0.0
bind_port = 9999
EOF

重要配置说明:

  • FRP_SERVER/FRP_PORT: 指向你的公网FRPS。
  • sk: 安全密钥。这是STCP模式的核心安全措施。your_secret_key必须替换成一个强密码,且被控端和控制端的配置文件中必须完全一致。没有正确密钥的访问者无法连接。这是防止未授权访问的关键!
  • [webtty]server_name=webtty: 名称需对应,表示访问者连接哪个服务。
  • local_port=8081bind_port=9999: 前者是ttyd在被控服务器本地监听的端口(可改),后者是控制端frpc在本地打开的端口(可改),浏览器访问的就是这个9999端口。
  • 安全警告: 示例中的sk = abcdefg是极弱密码!务必替换为长且复杂的随机字符串。
4. 复制文件到控制端
  • 将整个 /opt/remote_webtty 目录(包含frp_0.42.0_linux_amd64文件夹、ttyd文件、frpc_client.ini文件)复制到你用于控制的电脑(Client)上。可以使用scprsync或任何你熟悉的文件传输方式。
5. 在被控服务器上启动服务
cd /opt/remote_webtty
# 停止可能已存在的旧进程 (首次运行可忽略报错)
killall -9 ttyd frpc 2>/dev/null || true
# 启动 ttyd Web终端 (-p 8081 指定监听端口,-c user:pass 设置基础认证! 替换username/password)
./ttyd -p 8081 -c username:password bash &  # 后台运行ttyd,提供bash终端
# 启动 frpc 客户端,连接到FRPS并注册webtty服务
./frp_0.42.0_linux_amd64/frpc -c ./frpc_srv.ini

详细解释:

  • ./ttyd -p 8081 -c username:password bash &
    • -p 8081: 指定ttyd监听本地的8081端口(需与frpc_srv.ini中的local_port一致)。
    • -c username:password: 设置基础HTTP认证。强烈建议设置! 替换usernamepassword为你选择的凭证。这样即使有人猜到了FRP隧道地址,也需要输入这个用户名密码才能进入终端。这是第二道安全防线。
    • bash: 指定ttyd运行哪个shell(通常是bashsh)。
    • &: 让命令在后台运行。
  • ./frp.../frpc -c ./frpc_srv.ini: 启动FRP客户端,加载srv.ini配置文件连接FRPS并注册[webtty]服务。
6. 在控制端电脑上启动访问者
cd /opt/remote_webtty  # 进入你复制过来的目录
# 启动 frpc 访问者,连接到FRPS并监听本地9999端口
./frp_0.42.0_linux_amd64/frpc -c ./frpc_client.ini

详细解释:

  • 此命令启动FRP客户端,加载frpc_client.ini配置文件。
  • 它连接同一个FRPS,并声明自己是一个访问者(role=visitor),要访问名为webtty的服务。
  • 它会在控制端电脑的所有网络接口 (bind_addr=0.0.0.0) 上的 9999端口 (bind_port=9999) 开始监听。此时,访问本机的9999端口,流量就会被FRP通过安全隧道转发到被控服务器的ttyd服务(8081端口)。
7. 在控制端电脑上访问Web终端

打开你控制端电脑上的任何现代浏览器(Chrome, Firefox, Edge等),访问以下地址:

http://localhost:9999/

或者,如果你需要从控制端电脑所在网络的其他设备访问(不推荐,除非网络环境非常安全),使用控制端电脑的局域网IP:

http://<控制端电脑的局域网IP地址>:9999/

你会看到:

  1. 浏览器可能会弹出HTTP基础认证对话框(如果ttyd配置了-c选项),输入你在第5步设置的usernamepassword
  2. 认证通过后,一个功能齐全的命令行终端界面将加载到你的浏览器窗口中。
  3. 在这个网页终端里输入的命令(如ls, cd, top, vim等),会直接在被控服务器上执行,执行结果也会实时显示在网页上。就像你通过SSH连接操作一样!

请添加图片描述
请添加图片描述

四、关键要点与注意事项

  1. 核心价值: 这是解决SSH完全不可用无法安装图形工具场景的终极救急方案。通过标准HTTP/HTTPS端口(80/443)工作,穿透能力强。
  2. 安全性是重中之重:
    • sk密钥: 务必使用长且复杂的随机字符串作为STCP的sk
    • ttyd认证: 强烈建议使用-c user:pass为Web终端设置登录密码。
    • 最小化暴露: STCP模式要求访问者显式配置,比直接暴露TCP端口(如tcp模式)更安全。完成后及时关闭服务。
    • 防火墙: 确保公网FRPS的端口(通常是7000)开放。被控服务器和控制端通常只需出站访问互联网。
  3. 稳定性: ttydfrpc进程可能因网络波动或长时间运行退出。考虑使用systemd服务或supervisord等工具将其配置为守护进程,并设置自动重启。
  4. 保持更新: 定期检查并更新使用的frpttyd到最新版本,以获取安全补丁和新功能。替换上述命令中的版本号。
  5. 替代方案: 如果条件允许,修复SSH或成功安装标准远程工具(如SSH本身、VNC、TeamViewer、AnyDesk)通常是更优、更稳定的长期方案。此方案更适合临时应急
  6. HTTPS (可选但推荐): 对于公网FRPS,强烈建议配置HTTPS。对于ttyd,也可以配置自签名证书(ttyd -S选项),并通过FRP的HTTPS类型暴露,实现浏览器到ttyd的全程加密。这增加了中间人攻击的难度。

通过这个基于FRP内网穿透和ttyd Web终端的方案,即使面对SSH崩溃和常规工具安装失败的绝境,你也能迅速开辟一条可靠的远程命令行之“路”,为恢复服务器掌控权赢得宝贵时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93725.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93725.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93725.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用 AI 自动生成口型同步视频,短视频内容也能一人完成

近几年做跨境电商或内容运营的同学&#xff0c;应该都能感受到视频内容正逐渐从“锦上添花”变成了“必选项”。尤其是 TikTok、Instagram Reels、Facebook 短视频、甚至一些独立站内嵌视频讲解页&#xff0c;对带讲解、有人脸、自然语音的视频内容都有显著的转化提升作用。但实…

全基因组关联分析(GWAS)中模型参数选择:MLM、GLM与FarmCPU的深度解析

全基因组关联分析(GWAS)是识别与复杂性状相关的遗传变异的重要工具。然而&#xff0c;模型选择不当会导致假阳性率升高或统计功效降低。本文将为大家介绍GWAS中如何选择合适的模型参数&#xff0c;重点解析广义线性模型(GLM)、混合线性模型(MLM)和FarmCPU三种主流模型的原理、区…

6.苹果ios逆向-过ssl证书检测-安装SSL Kill Switch 3

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

Tomcat,WebLogic等中间件漏洞实战解析

1.tomactCVE-2017-12615首先启动环境&#xff0c;这里所有的漏洞都是在vulhub中的然后去访问我们的网站点击打开哥斯拉去生成一个jsp木马然后打开抓包&#xff0c;刷新一下页面&#xff0c;修改put方法将我们的木马上传一下&#xff0c;这里需要在jsp后加一个/&#xff0c;来绕…

15、点云<—>深度图转换原理

* 定义虚拟相机分辨率. Width := 800 Height := 800* 定义一个系数用于在3D模型中计算图像的边缘 BorderFact := 1.5* 是否选择镜头. IsTelecentric := false GenParamName := [lut,intensity,disp_pose_0,alpha_0,disp_background] GenParamValue := [hsi,coord_z,true,0.3,tr…

大疆无人机开发:MQTT 赋能机场系统集成的Java实战之旅

目录 集成实现步骤​ 项目初始化​ MQTT 连接配置​ 大疆无人机与 MQTT 集成​ 机场系统功能实现​ 代码实战与案例分析​ 示例代码展示​ 案例分析​ 数据格式不匹配问题​ 指令冲突问题​ 性能优化与安全保障​ 性能优化策略​ 安全保障措施​ 集成实现步骤​ …

逻辑回归详解:从数学原理到实际应用

文章目录一、逻辑回归的核心思想&#xff1a;从线性到概率1. 线性回归的局限与突破Sigmoid函数特性&#xff08;代码可视化&#xff09;&#xff1a;2. 逻辑回归的预测公式二、损失函数&#xff1a;如何学习最优参数&#xff1f;1. 对数损失函数的数学定义损失函数解析&#xf…

粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑

&#x1f4d8; GitHub Workflows 基础&#xff08;二&#xff09;&#xff1a;深入理解 on、jobs、steps 的核心语法与执行逻辑继第一篇讲完 .github/workflows/ 中多个工作流的结构后&#xff0c;本篇将深入 GitHub Actions 的核心三要素&#xff1a;on&#xff08;触发器&…

React Filber及核心原理

1. React Fiber 的核心目标‌‌增量渲染‌&#xff1a;将大型更新拆解为可中断的小任务&#xff08;时间切片&#xff09;&#xff0c;避免阻塞主线程‌优先级调度‌&#xff1a;动态管理任务执行顺序&#xff08;如用户交互 > 动画 > 数据加载&#xff09;。与浏览器协作…

Shader开发(五)什么是渲染管线

在计算机图形学中&#xff0c;渲染管线&#xff08;Rendering Pipeline&#xff09; 是图形处理器&#xff08;GPU&#xff09;将3D网格数据转化为屏幕图像的核心流程。无论是炫酷的游戏画面还是逼真的动画场景&#xff0c;这一切都离不开渲染管线的默默工作。对于想要学习着色…

CentOS7 使用Docker安装MinIO完整教程

目录 1. MinIO简介 什么是MinIO? 为什么选择Docker安装? 2. 环境准备 检查Docker状态 检查防火墙设置 创建存储目录 3. 快速启动MinIO 基础启动命令 验证启动状态 4. 配置持久化存储 停止并删除临时容器 使用数据卷启动MinIO 验证数据持久化 5. 访问MinIO控制台…

【数据库】时序数据库选型指南:从大数据视角看IoTDB的核心优势

文章目录前言-官网链接一、时序数据管理的时代挑战二、时序数据库选型的六大核心维度1. 数据模型设计2. 写入与查询性能3. 存储效率4. 系统扩展性5. 生态兼容性6. 运维复杂度三、IoTDB的技术架构解析1. 存储引擎创新2. 计算引擎优势3. 分布式架构设计四、行业解决方案对比1. 能…

【25-cv-08364】Keith携Hello Angel版权图发案

Hello Angel版权图案件号&#xff1a;25-cv-08364起诉时间&#xff1a;2025/7/22原告&#xff1a;Angelea Clark Van Dam原告律所&#xff1a;Keith受理法院&#xff1a;伊利诺伊州北区地方法院原告介绍原告是是一位来自澳大利亚的艺术家&#xff0c;笔名为Hello Angel&#xf…

SkSurface---像素的容器:表面

如果说 SkCanvas 是画布&#xff0c;是所有绘图操作的提供者的话&#xff0c;那么 SkSurface 就是画布的容器&#xff0c;我们称之为表面&#xff0c;它负责管理画布对应的像素数据。这些像素数据可以是在内存中创建的&#xff0c;也可以是在 GPU 显存中创建的。创建一个空白表…

26.(vue3.x+vite)以pinia为中心的开发模板

效果截图 代码实现 HelloWorld.vue <template><div style="padding: 20px;">介绍:<br>1:使用class 来减少pinia(store)的代码量<br>

华为AI Agent智能园艺助手开发案例

一、引言与行业背景 在数字化与智能化日益渗透我们生活的今天&#xff0c;园艺这一传统而充满生机的领域&#xff0c;也迎来了智能化的革新。华为AI Agent智能园艺助手通过融合人工智能与园艺专业知识&#xff0c;为用户提供一站式、个性化的园艺养护解决方案&#xff0c;彻底改…

Linux Flathub软件管理方法 使用指南

Flathub 使用指南&#xff1a;软件安装、管理及常用软件推荐 一. 什么是 Flathub&#xff1f; Flathub 是 Flatpak 应用程序的主要分发中心&#xff0c;类似于 Linux 上的"应用商店"。它提供了一种跨发行版的软件打包和分发方式&#xff0c;让用户可以在任何 Linux 发…

GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【二】

沿袭我们的月度发布传统&#xff0c;极狐GitLab 发布了 18.2 版本&#xff0c;该版本带来了议题和任务的自定义工作流状态、新的合并请求主页、新的群组概览合规仪表盘、下载安全报告的 PDF 导出文件、中心化的安全策略管理&#xff08;Beta&#xff09;等几十个重点功能的改进…

​​免费语音转换服务(TTS)全面指南

​​​​1. TTS技术概述​​ TTS&#xff08;Text-to-Speech&#xff09;通过AI将文字转化为自然语音&#xff0c;核心技术包括​​深度神经网络&#xff08;DNN&#xff09;​​、​​语音韵律建模​​和​​声学合成​​。其核心优势在于&#xff1a; ​​多语言支持​​&a…