news 2026/9/3 12:47:41

不需要 frpc!如何用 frp 的 SSH 隧道网关实现内网穿透:完整实战教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
不需要 frpc!如何用 frp 的 SSH 隧道网关实现内网穿透:完整实战教程

不需要 frpc!如何用 frp 的 SSH 隧道网关实现内网穿透:完整实战教程

【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frp

frp 是一款广受欢迎的开源内网穿透工具,而传统方案要求你在内网机器上安装并运行 frpc 客户端。从 v0.53.0 开始,frp 新增了SSH 隧道网关(SSH Tunnel Gateway):frps 服务端内置一个 SSH 服务器,你只需要在本地执行一条标准的ssh -R命令,就能把内网服务暴露到公网——全程无需 frpc。本文带你完整走通配置、打通、验证与安全加固四个环节。

为什么 SSH 隧道网关能替代 frpc?

SSH 协议本身就支持反向端口转发(即-R参数)。frp 的 SSH 隧道网关正是利用了这一点:

  • frps 端:开启一个 SSH 监听端口,扮演"SSH 服务器"角色;
  • 本地端:用系统自带的ssh客户端连接它,通过exec请求声明代理参数(类型、端口、域名等);
  • 流量路径:公网请求打到 frps 分配的端口,frps 经由 SSH 隧道把流量转发回你的本地服务。

也就是说,SSH 反向隧道在这里本质上就是一个"由 ssh 客户端驱动的 frpc"。它的适用场景非常典型:

  • 内网是一台无法安装/运行 frpc的机器(无 root、只读系统、临时借用的服务器);
  • 只想快速、临时地暴露一个服务,不想写配置文件;
  • 资源极度受限的设备,连 frpc 都跑不动。

服务端网关的入口逻辑在 pkg/ssh/gateway.go,SSH 会话与反向转发处理在 pkg/ssh/server.go。

第一步:在 frps 上开启 SSH 隧道网关

编辑frps.toml(完整字段可参考 conf/frps_full_example.toml),最小配置只需一行:

# frps.toml sshTunnelGateway.bindPort = 2200

执行./frps -c frps.toml后,frps 会在 2200 端口接受 SSH 连接。💡 此时会在当前工作目录自动生成一个.autogen_ssh_key私钥文件,供内置 SSH 服务器加解密使用,无需额外准备密钥。

完整配置项如下:

配置项作用是否必填
bindPortfrps 的 SSH 服务监听端口✅ 是
privateKeyFile指定 SSH 服务器使用的私钥文件(可复用本机id_rsa
autoGenPrivateKeyPath自动生成的私钥文件存放路径,默认./.autogen_ssh_key
authorizedKeysFileSSH 公钥认证文件,留空则不做 SSH 认证

⚠️安全提醒:最小配置下 SSH 连接无需任何认证。生产环境请务必配置 frps 的token认证,或启用 SSH 公钥认证(见下文"安全加固")。

第二步:一条 SSH 命令打通内网穿透隧道

在本地机器(或需要暴露服务的机器)上执行:

ssh -R :80:127.0.0.1:8080 v0@{frp_address} -p 2200 tcp --proxy_name "test-tcp" --remote_port 9090

命令各部分含义:

参数说明
-R :80:127.0.0.1:8080声明本地127.0.0.1:8080服务需要被转发
v0@{frp_address}用户名固定为v0,地址为 frps 公网 IP
-p 2200frps 的 SSH 监听端口
tcp代理类型,支持tcp/http/https/stcp/tcpmux
--remote_port 9090公网端实际监听的端口
--proxy_name代理名称,可省略(自动生成随机名)

执行成功后会看到类似输出,随后保持前台运行即可(Ctrl+C 退出并撤销代理):

frp (via SSH) (Ctrl+C to quit) User: ProxyName: test-tcp Type: tcp RemoteAddress: :9090

现在,任何设备访问frps公网IP:9090的流量都会被转发到你本地的 8080 端口——这与以下 frpc 命令完全等效,却少装了一整个客户端:

frpc tcp --proxy_name "test-tcp" --local_ip 127.0.0.1 --local_port 8080 --remote_port 9090

进阶:发布 HTTP / HTTPS 服务到自定义域名

如果 frps 配置了vhostHTTPPort,还可以用同一条命令模式发布 HTTP 站点:

ssh -R :80:127.0.0.1:8080 v0@{frp_address} -p 2200 http --proxy_name "test-http" --custom_domain test-http.frps.com

之后用curl http://test-http.frps.com即可访问本地 8080 端口的站点,等效于传统的 frpchttp类型代理。httpsstcptcpmux类型的更多参数,执行对应命令加--help即可查看:

ssh -R :80:127.0.0.1:8080 v0@{frp_address} -p 2200 stcp --help

安全加固:token 认证 + SSH 公钥认证

两层认证互相独立、依次生效(先 SSH 认证,后 frps token 认证),建议至少启用其一:

1️⃣ 启用 frps token

frps.toml中配置auth.token,并在 SSH 命令中带上:

ssh -R :80:127.0.0.1:8080 v0@{frp_address} -p 2200 tcp --remote_port 9090 --token "你的token"

2️⃣ 复用本机 authorized_keys 做公钥认证

sshTunnelGateway.bindPort = 2200 sshTunnelGateway.authorizedKeysFile = "/home/user/.ssh/authorized_keys"

frp 不支持 SSH 用户名/密码登录,公钥认证复用你现有的密钥即可,无需新建。注意:若更换了 frps 的私钥文件,客户端可能因主机指纹变化而登录失败,删除本地/home/user/.ssh/known_hosts中对应记录即可。

验证与排障

  • 查看代理状态:如果 frps 开启了 Web 管理面板(webServer),登录后可以在 Overview 页面查看当前代理数量与流量概况:

  • 代理不生效:确认本地服务端口可访问(如curl 127.0.0.1:8080),并确认--remote_port未被占用。
  • SSH 登录失败:优先检查known_hosts指纹缓存与authorizedKeysFile配置。
  • 需要后台运行:直接Ctrl+Z+disown,或使用tmux/nohup托管该 ssh 进程。

官方端到端测试覆盖了 tcp、http、https、tcpmux、stcp 全部类型,可作为行为参考:test/e2e/v1/features/ssh_tunnel.go。

常见问题 FAQ

Q:SSH 隧道网关和"用 frp 穿透 SSH 端口"是一回事吗?不是。前者是不使用 frpc、借 SSH 协议反向转发完成基础内网穿透;后者是通过 frpc 把内网的 SSH 服务暴露给公网访问。

Q:一台机器可以建多个隧道吗?可以。每条ssh -R连接就是一个独立代理,多开几个终端即可分别暴露不同端口/域名。

Q:支持 UDP 吗?该模式目前仅覆盖 TCP 类代理(tcp/http/https/stcp/tcpmux)。

总结

能力传统 frpc 方案SSH 隧道网关方案
内网机安装客户端必须安装 frpc❌ 零安装
编写配置文件需要❌ 一条命令
代理类型全部tcp / http / https / stcp / tcpmux
适用版本-v0.53.0+
适用场景长期、完整功能临时、快速、免安装

当你只需要"快速把内网服务推上公网"时,SSH 隧道网关是最轻量的选择:一行 frps 配置 + 一条 ssh 命令,内网穿透即刻完成。更多字段细节可查阅官方文档 doc/ssh_tunnel_gateway.md,需要完整功能时再切回标准 frpc 方案即可。

【免费下载链接】frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.项目地址: https://gitcode.com/GitHub_Trending/fr/frp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 12:47:21

表现心理学:如何在压力下稳定发挥,实现可持续高绩效

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 12:46:14

基于MATLAB的AUV水下路径规划:从算法原理到工程实践

简介:本资源是一套面向高校本科生毕业设计与课程设计的MATLAB自主式水下航行器(AUV)路径规划实践方案,聚焦水下复杂环境中考虑地形、障碍物、运动学约束与能耗的路径生成问题。压缩包共36个文件,含30个核心MATLAB脚本&…

作者头像 李华
网站建设 2026/9/3 12:43:19

【单片机毕设案例分享】基于 STM32 的带烟雾预警智能垃圾桶模型设计 基于 STM32 的 LU-ASR01 语音垃圾分类控制系统开发(013106)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机,STM32单片机,51单片机,J…

作者头像 李华
网站建设 2026/9/3 12:41:40

格子达检测四万字毕业论文大面积标红:BunnyScholar整篇降AI教程

格子达检测四万字毕业论文大面积标红:BunnyScholar整篇降AI教程 在电气工程与新能源微电网多能互补综合能源系统能量管理策略(EMS)优化方向的硕士学位论文抽检前期,许多同学都会遭遇四万字长文大面积标红的紧急挑战:格…

作者头像 李华
网站建设 2026/9/3 12:41:27

[AutoSar]BSW_Com05 CAN2.0 和CANFD DBC 的相互转换

目录关键词平台说明一、DBC创建时的区别二.分别生成一个空白模板三、CAN 2.0 转为 CANFD3.1 用文本工具打开需要转换的CAN2.0DBC文件四、CAN 2.0 转为 CANFD关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector ,芯片厂商T…

作者头像 李华