news 2026/5/20 22:10:21

校园网/内网服务器远程登录指南:frp + 云服务器实现 SSH 穿透

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
校园网/内网服务器远程登录指南:frp + 云服务器实现 SSH 穿透

内网本地算力服务器如何通过 frp 实现任意电脑 SSH 访问

适用场景:实验室、校园网、公司内网、家庭宽带等环境下,本地 GPU/算力服务器没有公网 IP,外部电脑无法直接 SSH 登录。本文介绍如何借助一台有公网 IP 的云服务器,使用frp将内网服务器的 SSH 服务映射到公网端口,从而在任何电脑上远程连接本地算力服务器。


1. 为什么需要这个方案?

很多本地算力服务器部署在校园网、实验室内网或运营商 NAT 后面,虽然服务器本身能访问互联网,但外部电脑无法直接访问它的22端口。常见问题包括:

  • 本地算力服务器没有公网 IP;
  • 校园网或公司网络不允许外部主动访问内网机器;
  • 路由器没有权限做端口映射;
  • 希望在外出、宿舍、办公室或任意电脑上 SSH 登录算力服务器;
  • 不想把模型训练、ONNX 服务、数据集处理全部搬到云服务器。

解决思路是:让内网服务器主动连接云服务器,并在这条连接上建立反向代理隧道。外部电脑只需要访问云服务器的公网 IP 和指定端口,即可被转发到内网服务器的 SSH 服务。

注意:严格来说,云服务器上运行的是frps,本地内网算力服务器上运行的是frpc。很多人会把二者混淆。可以这样记:frps中的s代表 server,部署在公网云服务器;frpc中的c代表 client,部署在内网客户端机器。


2. 整体网络拓扑

核心链路如下:

ssh -p 6000 user@公网IP

主动连接 7000

公网 6000 端口转发

任意电脑
Windows / macOS / Linux

公网云服务器
frps

内网本地算力服务器
frpc + sshd

可以把它理解为三层结构:

角色所在位置运行程序作用
任意电脑外部网络SSH 客户端发起远程登录
公网云服务器公网 IP 环境frps接收外部 SSH 请求,并转发到内网隧道
本地算力服务器校园网/内网/NAT 后frpc+sshd主动连接云服务器,暴露本机 SSH 服务

3. 端口规划

为了便于理解,本文使用下面这组端口。实际部署时可以按需修改。

端口所在机器用途是否需要公网开放
22本地算力服务器本机 SSH 服务端口不需要
7000云服务器frpc连接frps的控制端口需要
6000云服务器外部电脑 SSH 登录入口需要

连接命令最终会变成:

ssh-p6000用户名@云服务器公网IP

虽然命令中写的是云服务器公网 IP,但最终登录进去的是内网本地算力服务器。


4. 部署流程总览

本地 sshd:22本地算力服务器 frpc云服务器 frps任意电脑本地 sshd:22本地算力服务器 frpc云服务器 frps任意电脑主动连接 serverAddr:7000ssh -p 6000 user@公网IP通过 frp 隧道转发 TCP 流量访问 127.0.0.1:22返回 SSH 会话

5. 前置条件

开始之前,请准备:

  1. 一台云服务器:具有公网 IP,例如腾讯云、阿里云、华为云、轻量应用服务器等;
  2. 一台本地算力服务器:Ubuntu、Debian、CentOS、Rocky Linux 等均可;
  3. 云服务器安全组可开放端口;
  4. 本地算力服务器可以访问互联网;
  5. 本地算力服务器已经安装并启用 SSH 服务。

检查本地算力服务器 SSH 是否可用:

sudosystemctl statusssh# 或者部分系统使用 sshdsudosystemctl status sshd

如果没有安装 SSH 服务,可执行:

# Ubuntu / Debiansudoaptupdatesudoaptinstall-yopenssh-serversudosystemctlenable--nowssh# CentOS / Rocky Linuxsudoyuminstall-yopenssh-serversudosystemctlenable--nowsshd

检查22端口是否监听:

sudoss-lntp|grep':22'

6. 下载 frp

frp 由frpsfrpc两个程序组成。为了避免版本不一致,建议云服务器和本地算力服务器使用同一个版本。

以 Linuxamd64架构为例:

cd/tmpFRP_VERSION=0.68.1wgethttps://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gztar-zxvffrp_${FRP_VERSION}_linux_amd64.tar.gzcdfrp_${FRP_VERSION}_linux_amd64

如果你的机器是 ARM 架构,先检查架构:

uname-m

常见对应关系:

uname -m输出建议下载版本
x86_64linux_amd64
aarch64linux_arm64
armv7llinux_arm

实际使用时,可以到 frp GitHub Releases 页面查看最新版本,并将上面的FRP_VERSION替换为最新版本号。


7. 在云服务器部署 frps

7.1 安装 frps

在云服务器上执行:

sudomkdir-p/etc/frp /var/log/frpsudocpfrps /usr/local/bin/frpssudochmod+x /usr/local/bin/frps

检查是否安装成功:

frps-v

7.2 编写 frps 配置文件

创建配置文件:

sudonano/etc/frp/frps.toml

写入以下内容:

# /etc/frp/frps.toml # frpc 连接 frps 的端口 bindPort = 7000 # 使用 token 认证,frps 和 frpc 必须保持一致 auth.method = "token" auth.token = "请替换为一个足够复杂的随机字符串" # 强制 frpc 使用 TLS 连接 frps transport.tls.force = true # 只允许 frpc 映射指定公网端口,避免端口被滥用 allowPorts = [ { single = 6000 } ] # 日志配置 log.to = "/var/log/frp/frps.log" log.level = "info" log.maxDays = 7

建议生成一个随机 token:

openssl rand-hex32

将生成结果填入:

auth.token = "这里替换成生成的随机 token"

7.3 开放云服务器端口

需要在云服务器控制台的安全组中放行:

  • 7000/tcp:供内网算力服务器的frpc连接;
  • 6000/tcp:供外部电脑 SSH 登录。

如果云服务器系统本身启用了防火墙,也需要放行:

# Ubuntu / Debian: ufwsudoufw allow7000/tcpsudoufw allow6000/tcpsudoufw reload# CentOS / Rocky Linux: firewalldsudofirewall-cmd--permanent--add-port=7000/tcpsudofirewall-cmd--permanent--add-port=6000/tcpsudofirewall-cmd--reload

安全建议:如果你的外部登录 IP 比较固定,建议在云服务器安全组中只允许自己的办公网、宿舍网或 VPN 出口 IP 访问6000/tcp,不要无条件暴露给全网。

7.4 使用 systemd 管理 frps

创建服务文件:

sudonano/etc/systemd/system/frps.service

写入:

[Unit] Description=frp server service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml Restart=always RestartSec=5 LimitNOFILE=1048576 [Install] WantedBy=multi-user.target

启动并设置开机自启:

sudosystemctl daemon-reloadsudosystemctlenable--nowfrpssudosystemctl status frps

查看日志:

journalctl-ufrps-f

如果你的运行环境不支持 systemd,例如某些容器环境,可以临时使用:

nohup/usr/local/bin/frps-c/etc/frp/frps.toml>/var/log/frp/frps.out2>&1&

8. 在本地算力服务器部署 frpc

8.1 安装 frpc

在本地算力服务器上执行:

sudomkdir-p/etc/frp /var/log/frpsudocpfrpc /usr/local/bin/frpcsudochmod+x /usr/local/bin/frpc

检查版本:

frpc-v

8.2 编写 frpc 配置文件

创建配置文件:

sudonano/etc/frp/frpc.toml

写入:

# /etc/frp/frpc.toml # 云服务器公网 IP serverAddr = "你的云服务器公网IP" # 必须与 frps.toml 中的 bindPort 一致 serverPort = 7000 # 认证方式和 token 必须与 frps 完全一致 auth.method = "token" auth.token = "与云服务器 frps.toml 中完全相同的 token" # 使用 TLS 连接 frps transport.tls.enable = true [[proxies]] name = "local-gpu-server-ssh" type = "tcp" # 本地 SSH 服务地址 localIP = "127.0.0.1" localPort = 22 # 映射到云服务器的公网端口 remotePort = 6000 # 可选:对代理流量开启加密和压缩 transport.useEncryption = true transport.useCompression = true

这里的含义是:

云服务器公网IP:6000 → frp 隧道 → 本地算力服务器 127.0.0.1:22

8.3 检查 frpc 配置

启动前可以先验证配置:

frpc verify-c/etc/frp/frpc.toml

如果没有报错,再继续启动。

8.4 使用 systemd 管理 frpc

创建服务文件:

sudonano/etc/systemd/system/frpc.service

写入:

[Unit] Description=frp client service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml Restart=always RestartSec=5 LimitNOFILE=1048576 [Install] WantedBy=multi-user.target

启动并设置开机自启:

sudosystemctl daemon-reloadsudosystemctlenable--nowfrpcsudosystemctl status frpc

查看日志:

journalctl-ufrpc-f

如果看到类似start proxy successlogin to server success的信息,说明本地算力服务器已经成功连接到云服务器。


9. 在任意电脑上 SSH 连接本地算力服务器

在任意一台电脑上执行:

ssh-p6000本地算力服务器用户名@云服务器公网IP

例如:

ssh-p6000peiguoquan@110.40.181.152

此时 SSH 请求流程是:

你的电脑 → 云服务器公网IP:6000 → frps → frpc 隧道 → 本地算力服务器 127.0.0.1:22

如果希望简化命令,可以在本机电脑上配置~/.ssh/config

Host gpu-server HostName 云服务器公网IP Port 6000 User 本地算力服务器用户名 ServerAliveInterval 60 ServerAliveCountMax 3

以后只需要:

sshgpu-server

10. 配置密钥登录,提高安全性

直接将 SSH 暴露到公网端口存在安全风险,建议使用 SSH 密钥登录,并关闭密码登录。

10.1 在外部电脑生成密钥

ssh-keygen-ted25519-C"gpu-server"

10.2 将公钥复制到本地算力服务器

由于 frp 已经映射了 SSH,可以直接通过公网端口复制:

ssh-copy-id-p6000本地算力服务器用户名@云服务器公网IP

如果 Windows 没有ssh-copy-id,可以手动把本机的:

~/.ssh/id_ed25519.pub

内容追加到本地算力服务器的:

~/.ssh/authorized_keys

10.3 确认密钥可登录后再关闭密码登录

先测试:

ssh-p6000本地算力服务器用户名@云服务器公网IP

确认密钥登录成功后,在本地算力服务器编辑 SSH 配置:

sudonano/etc/ssh/sshd_config

建议设置:

PubkeyAuthentication yes PasswordAuthentication no PermitRootLogin no

重启 SSH 服务:

sudosystemctl restartssh# 或sudosystemctl restart sshd

重要提醒:关闭密码登录前,一定要确认密钥登录已经成功,否则可能把自己锁在服务器外面。


11. 多台内网服务器如何配置?

如果有多台本地算力服务器,每台机器都可以运行一个frpc,但需要使用不同的nameremotePort

例如:

内网服务器SSH 本地端口云服务器映射端口登录命令
GPU 服务器 A226001ssh -p 6001 user@公网IP
GPU 服务器 B226002ssh -p 6002 user@公网IP
数据服务器 C226003ssh -p 6003 user@公网IP

云服务器frps.toml可以放宽端口范围:

allowPorts = [ { start = 6001, end = 6010 } ]

每台内网服务器的frpc.toml类似:

serverAddr = "云服务器公网IP" serverPort = 7000 auth.method = "token" auth.token = "相同的 token" transport.tls.enable = true [[proxies]] name = "gpu-server-a-ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6001

第二台机器只需要改:

name = "gpu-server-b-ssh" remotePort = 6002

12. 常见问题排查

12.1 外部电脑连接超时

现象:

ssh: connect tohost云服务器公网IP port6000: Connection timed out

优先检查:

# 在云服务器检查端口是否监听sudoss-lntp|grep6000sudoss-lntp|grep7000# 在云服务器查看 frps 日志journalctl-ufrps-f# 在本地算力服务器查看 frpc 日志journalctl-ufrpc-f

常见原因:

  • 云服务器安全组没有开放6000/tcp
  • 云服务器系统防火墙没有开放6000/tcp
  • frpc没有成功连接frps
  • remotePort写错;
  • 云服务器公网 IP 写错。

12.2 frpc 认证失败

日志可能出现:

authentication failed

通常是frps.tomlfrpc.toml中的 token 不一致。请检查:

auth.method = "token" auth.token = "两边必须完全一致"

注意不要多复制空格、中文引号或换行符。


12.3 端口被占用

现象:

bind: address already in use

检查端口占用:

sudoss-lntp|grep6000sudoss-lntp|grep7000

解决方法:

  • 修改remotePort,例如改为6001
  • 修改云服务器安全组放行新端口;
  • 同步修改外部 SSH 命令中的-p参数。

12.4 SSH 提示 Permission denied

现象:

Permission denied (publickey,password)

这说明 frp 隧道基本已经通了,问题在 SSH 账号、密码或密钥上。检查:

  • 用户名是否是本地算力服务器上的用户名,而不是云服务器用户名;
  • 密钥是否已经写入本地算力服务器的~/.ssh/authorized_keys
  • 本地算力服务器的/etc/ssh/sshd_config是否允许对应登录方式;
  • 是否误用了 root 登录,而服务器禁止 root 登录。

13. 推荐安全策略

为了长期稳定使用,建议至少做到以下几点:

安全措施建议
使用强 token不要使用123456adminfrp等弱 token
限制映射端口frps.toml中配置allowPorts
SSH 密钥登录推荐使用ed25519密钥
禁止 root 远程登录PermitRootLogin no
关闭密码登录确认密钥可用后设置PasswordAuthentication no
限制安全组来源 IP如果固定办公 IP,建议只允许白名单访问
定期查看日志检查异常登录和爆破尝试

如果对安全性要求更高,可以进一步使用:

  • WireGuard / Tailscale / ZeroTier 等组网方案;
  • frp 的 STCP 模式;
  • 云服务器安全组 IP 白名单;
  • Fail2ban 防暴力破解;
  • 单独创建普通用户,不开放 root 登录。

14. 一键命令速查

云服务器 frps

sudomkdir-p/etc/frp /var/log/frpsudocpfrps /usr/local/bin/frpssudochmod+x /usr/local/bin/frpssudonano/etc/frp/frps.tomlsudosystemctl daemon-reloadsudosystemctlenable--nowfrps journalctl-ufrps-f

本地算力服务器 frpc

sudomkdir-p/etc/frp /var/log/frpsudocpfrpc /usr/local/bin/frpcsudochmod+x /usr/local/bin/frpcsudonano/etc/frp/frpc.toml frpc verify-c/etc/frp/frpc.tomlsudosystemctl daemon-reloadsudosystemctlenable--nowfrpc journalctl-ufrpc-f

任意电脑 SSH 登录

ssh-p6000用户名@云服务器公网IP

15. 总结

通过 frp 可以把无公网 IP 的本地算力服务器变成可远程 SSH 访问的开发环境。整体思路并不复杂:

本地算力服务器 frpc 主动连接云服务器 frps 外部电脑访问云服务器公网端口 frps 将 SSH 流量转发给 frpc frpc 再连接本机 127.0.0.1:22 最终实现远程登录内网算力服务器

这个方案特别适合本地部署了 GPU、模型服务、数据集或训练环境,但又无法直接暴露公网 IP 的场景。相比把所有计算任务迁移到云端,它能够充分利用本地算力资源,同时通过云服务器提供一个稳定的公网入口。


参考资料

  • fatedier/frp GitHub 仓库
  • frp 官方网站
  • frp Release 下载页面
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 22:10:01

Claude Code 安装报错排查清单:5 类高频错误的 7 步诊断脚本

1. 安装报错不是故障,是环境在说话 大多数人第一次运行 claude code --version 或点击桌面图标时看到红字报错,第一反应是“工具坏了”。我试过三个团队的安装记录:平均每人会重装 2.3 次,花掉 47 分钟——而其中 82% 的错误根本不需要重装。它们只是环境在用 stderr 吐露…

作者头像 李华
网站建设 2026/5/20 22:10:00

Gemini3.1Pro内容安全实测过滤机制与合规性全拆解

做多模型安全策略对比时,可以先了解一下库拉这个AI模型聚合平台,一站接入多个主流模型,方便在同一套prompt下对比不同模型的安全过滤表现。最近把Gemini 3.1 Pro的安全机制从配置到实测完整跑了一遍,结合国内AIGC合规要求&#xf…

作者头像 李华
网站建设 2026/5/20 22:09:09

测试工程师的健康管理:如何应对测试工作中的久坐和熬夜

一、测试工程师的健康困境:久坐与熬夜的双重夹击在软件行业快速迭代的节奏下,测试工程师作为产品质量的“守门人”,常常陷入健康的双重困境。一方面,长时间坐在电脑前编写测试用例、执行测试脚本、排查系统漏洞,日均久…

作者头像 李华
网站建设 2026/5/20 22:09:06

沈阳网站制作与建设公司推荐

在数字化时代,沈阳网站建设成为众多企业品牌建设的第一步。一个专业、美观、易用的企业网站,不仅能提升品牌形象,还能有效获取客户线索。沈阳互帮科技有限公司(评分:9.8/10)互帮科技在网站建设领域拥有丰富…

作者头像 李华
网站建设 2026/5/20 22:06:38

正电压转负电压芯片:LTC3704

简 介: 本文分析了FPGA实验板上一个正电压转负电压的电源转换电路。通过AI识别发现核心芯片为LTC3704,其输入电压范围2.5-36V,可输出-5V/3-5A,效率达90%。电路采用双绕组变压器(33μH/2.25A)、FDS6690A MOS…

作者头像 李华
网站建设 2026/5/20 22:06:37

2026年精选AI论文网站榜单(实测甄选版)

为解决学术写作中效率与合规两大核心痛点,以下精选8款高适配性AI论文写作工具(按综合优先级排序),围绕中文学术规范适配、真实参考文献生成、格式标准化、高性价比四大核心维度筛选,同时配套分场景精准选型方案与学术合…

作者头像 李华