TL;DR:在机器人/边缘计算场景里,设备(比如 NVIDIA Jetson Orin)常躲在内网,没法直接 SSH。这篇记录我在 Ubuntu ARM64(aarch64)上装
frpc客户端、用 TOML 新格式配 SSH 穿透、再做成 systemd 开机自启的完整流程。命令都可直接抄,文末附排错。
为什么要做这件事
我在搞机器人开发时,设备(Jetson Orin 这类 ARM64 板子)一般挂在内网,公司或家里的网络又没有公网 IP。每次想远程 SSH 上去调试都很麻烦。FRP(Fast Reverse Proxy)就是干这个的:在一台有公网 IP 的服务器上跑 frps 服务端,内网设备上跑 frpc 客户端,把内网的 22 端口反向映射到公网某个端口,从此随时随地 SSH。
本文只讲**客户端(frpc)**这一侧,以 NVIDIA Jetson(aarch64)为例,frp 版本 v0.58.1+。
1. 环境确认
先确认 CPU 架构,免得下错安装包:
uname -m
# 输出 aarch64 → ARM64 架构(常见于 Jetson、树莓派)
# 输出 x86_64 → AMD64 架构(常见于普通 PC/服务器)
本文以 aarch64 为例;如果你是 x86_64,把下面下载包名里的 arm64 换成 amd64 即可。
2. 下载与安装
去 FRP GitHub Releases 找版本号,把下面的 v0.58.1 换成你要的版本即可(注意 URL 路径里的版本号和文件名里的版本号要一致——这是我当初踩的坑,复制粘贴时很容易写错):
# 1. 下载 ARM64 版本安装包(以 v0.58.1 为例)
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_arm64.tar.gz
# 2. 解压
tar -zxvf frp_0.58.1_linux_arm64.tar.gz
# 3. 进入目录
cd frp_0.58.1_linux_arm64
# 4. 安装:把二进制丢到系统路径
sudo cp frpc /usr/bin/
sudo chmod +x /usr/bin/frpc
# 5. 准备配置目录
sudo mkdir -p /etc/frp
3. 配置文件(TOML 格式)
新版 FRP(v0.52.0+)推荐用 .toml 替代旧的 .ini。创建并编辑:
sudo vim /etc/frp/frpc.toml
按实际情况改 serverAddr、auth.token 和端口:
# ================= 基础配置 =================
# FRP 服务端公网 IP
serverAddr = "182.150.xx.xx"
# FRP 服务端监听端口(默认 7000,按你服务端的实际配置填)
serverPort = 8001
# ================= 鉴权配置 =================
auth.method = "token"
# 鉴权密钥(必须与服务端 frps.toml 里的 token 完全一致)
auth.token = "这里填写你的复杂Token字符串"
# ================= 代理配置 =================
[[proxies]]
# 代理名称(必须唯一,建议带上设备名好区分)
name = "ssh-orin-dev"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
# 远程访问端口(之后 SSH 连接用的就是这个端口)
remotePort = 8003
先跑一把验证:
./frpc -c /etc/frp/frpc.toml临时运行,看到start proxy success就说明配置通了,再去做自启。
4. 设置开机自启(systemd)
让 frpc 后台稳定运行、随系统启动,做成 systemd 服务。创建服务文件:
sudo vim /etc/systemd/system/frpc.service
写入(注意 ExecStart 的路径要和第 2 步安装位置一致):
[Unit]
Description=Frp Client Service
Documentation=https://github.com/fatedier/frp
# 确保网络就绪后再启动
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.toml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
5. 启动服务
# 重载 systemd 配置
sudo systemctl daemon-reload
# 启动 frpc
sudo systemctl start frpc
# 设置开机自启(注意是 enable,不是 start——这步是让它开机自动拉起)
sudo systemctl enable frpc
# 查看运行状态
sudo systemctl status frpc
状态显示绿色的 active (running) 就成了。
6. 远程连接测试
现在就能用公网 IP + 映射端口(remotePort)SSH 上去了:
# 端口对应配置里的 remotePort = 8003
ssh -p 8003 username@182.150.xx.xx
排错(Troubleshooting)
- 连接超时:检查云服务器(服务端)的防火墙 / 安全组,确保
serverPort(8001)和remotePort(8003)都放行了。 - 鉴权失败 / 起不来:确保客户端和服务端的
auth.token完全一致;frpc.service里Type=simple后面别多敲冒号,否则 systemd 解析会失败。 - 重启后没自动连:确认第 5 步执行的是
systemctl enable frpc而不是只start。
小结
FRP 客户端这套配下来,关键就三步:架构对版本、TOML 配代理、systemd 托管。配好之后内网设备就像有了公网地址,随时 SSH。我自己这套自托管玩法(包括博客)很大程度上就是靠 FRP 把家里几台设备暴露出来的。如果你也在折腾 Linux 服务器,可以顺手看看我另一篇 打造顺手的终端:Oh My Zsh + Powerlevel10k 配置,远程上去之后终端用着也舒服。