我是 p2pssh-server 和 File2File 的作者。底层通道用的是 webrpc。
家里的 Mac、Linux 小主机、树莓派、公司内网里的一台机器,经常没有公网 IP。想远程 SSH,常见做法是再租一台有公网的机器做中转,或者在路由器上记一串内网地址、端口映射。人一换网络,地址就变,收藏夹里的 IP 也跟着失效。
我把这件事收成两个程序:
- 设备上 只跑 p2pssh-server
- 人这一侧 用 File2File 桌面端里的 P2P SSH
远程设备不需要公网 IP,也不需要你记住它的内网 IP。连过一次的设备会留在 File2File 里,下次点一下就能再连。

连上之后有两种用法
| 方式 | 你怎么用 | 适合 |
|---|---|---|
| 应用内终端 | 点「新建终端」 | 直接在 File2File 里敲命令。服务端开的是登录 shell 的 PTY,不要求对方开着 sshd,你这台电脑也不必自带 ssh 命令 |
| 系统终端 | 按界面上的 ssh -p 端口 user@127.0.0.1 |
继续用你习惯的终端、密钥和脚本。流量先到本机端口,再经 P2P 转到远端 SSH(默认 127.0.0.1:22) |
截图里那条绿色命令就是第二种:端口由这次会话分配,外面看仍是连本机,实际落在已经配对好的那台设备上。
应用内终端在 Linux / macOS 的 p2pssh-server 上可用。Windows 上的服务端目前做 TCP 转发 ,给外部 ssh 客户端用;要应用内 shell,把服务端放在 Linux 或 macOS 上。
为什么不用先记 IP
p2pssh-server 启动时带的是 webrpc 的 Token、密码和口令,设备用 Token 标识,不靠「现在的局域网地址」。
File2File 登录后,在 P2P SSH 里新建隧道,选已经登记过的设备。左侧会留下设备名和 Token,在线状态能直接看到。下次打开软件,点原来那条,再进终端或复制本机 ssh 命令即可。
聊天、网盘、P2P SSH 可以在同一个 File2File 窗口里。SSH 只是其中一条通道,认证走 webrpc 的 Token 和口令。
设备上怎么跑
从 GitHub Release 拿对应平台的 p2pssh-server(macOS arm64、Linux amd64 / arm64、Windows amd64)。Token 在 webrpc.cn 申请,或用 File2File 一键注册领取体验 Token。
在要被连的那台机器上:
bash
./p2pssh-server \
--token YOUR_TOKEN \
--passwd YOUR_PASSWD \
--permission YOUR_PERMISSION
然后在另一台电脑打开 File2File,登录后进入 P2P SSH → 新建隧道,选这台设备。
- 只想在窗口里敲命令:点 新建终端(Linux / macOS 服务端)。
- 想用系统自带的 ssh:看界面给出的端口,执行
ssh -p 端口 用户名@127.0.0.1。这一路需要远端本机sshd可用,默认转到127.0.0.1:22,也可用--ssh-host、--ssh-port改。
应用内 shell 以 p2pssh-server 进程的用户身份运行。长期放在家里时,用专用账号启动,口令不要留空。
源码、两种通道和编译说明都在仓库:https://github.com/xiaoming-software/p2pssh-server。桌面客户端:https://github.com/xiaoming-software/File2File-Desktop。
没有公网 IP 的设备,远程 SSH 可以不再先养一台中转服务器,也不必把内网地址抄在备忘录里。服务端装上 p2pssh-server,人这边用 File2File 记住设备,下一次就是一键再连。