nssh 使用
nssh 是内网云的 SSH 反向隧道客户端,针对内网云穿透服务进行深度优化,内置守护进程模式、多连接管理与断线自动重连等能力。项目背景与安装方式见 nssh 开源。
获取 nssh
# npm 安装(Node.js 14+)
npm install -g @buladou/nssh
# pip 安装(Python 3.8+)
python3 -m pip install nssh
各平台客户端下载:https://www.neiwangyun.net/client/download/
备注
Windows 版本分为 legacy 和非 legacy 两种,legacy 版本适用于 Windows 7 及更早系统。
功能特性
- SSH 反向隧道协议支持(兼容
ssh -R) - 守护进程模式,支持后台持久运行
- 多连接管理,支持同时运行多个隧道实例
- 断线自动重连机制
- 密码认证
- 跨平台支持(Linux、macOS、Windows、路由器等)
- 极小的二进制体积(5–7 MB)
- 低运行内存占用(5 个连接,32 位系统约 6 MB,64 位系统约 10 MB)
快速开始
前台模式
前台模式直接运行隧道连接,连接生命周期与终端会话一致,关闭终端即断开。
nssh -R <远程端口>:<本地地址>:<本地端口> <用户名>@<服务器地址> -p <端口> --passwd <密码>
按 Ctrl+C 可主动终止连接。
示例:
nssh -R 80:127.0.0.1:8000 demo@n1.neiwangyun.net -p 2022 --passwd your_password
守护进程模式(推荐)
守护进程模式由后台守护进程管理隧道连接,关闭终端后连接继续运行。
提示
添加新连接时,若守护进程尚未启动,系统会自动创建守护进程,无需手动启动。
添加隧道连接:
nssh --daemon -R <远程端口>:<本地地址>:<本地端口> <用户名>@<服务器地址> -p <端口> --passwd <密码>
示例:
nssh --daemon -R 80:127.0.0.1:8000 demo@n1.neiwangyun.net -p 22 --passwd your_password
参数说明
| 参数 | 说明 |
|---|---|
--daemon | 启用守护进程模式,后台运行 |
--list | 列出所有运行中的隧道连接 |
--takeover | 接管旧版本客 户端的连接,执行前会提示二次确认 |
--takeover-force | 接管旧版本客户端的连接,跳过确认直接执行 |
--restart <连接ID|all> | 重启指定连接,或使用 all 重启全部连接 |
--stop <连接ID> | 停止指定连接 |
-R <远程端口>:<本地地址>:<本地端口> | 反向隧道配置,格式与 ssh -R 一致 |
-p <端口> | SSH 服务端端口 |
--passwd <密码> | SSH 认证密码 |
连接 ID
每个隧道连接以 用户名@服务器地址:端口 作为唯一标识(连接 ID)。
示例:demo@n1.neiwangyun.net:2022
对同一连接 ID 重复执行创建命令时,旧连接将被自动断开并重建。
常用命令示例
查看所有连接
nssh --list
输出示例:
PID Username Remote_Local Server Status
--------------------------------------------------------------------------------
12345 demo 80:127.0.0.1:8000 n1.neiwangyun.net:2022 online
12346 user2 81:127.0.0.1:8001 n1.neiwangyun.net:2022 online
添加新连接
nssh --daemon -R 80:127.0.0.1:8000 demo@n1.neiwangyun.net -p 2022 --passwd demo123
接管连接
信息
接管功能将平滑升级与进程重启相结合,适用于客户端版本更新或连接状态异常的场景。
当 nssh 客户端发布新版本时,可通过接管功能完成平滑升级:
- 下载新版本客户端
- 执行接管命令
- 根据提示输入
Y或y确认 - 旧版本连接信息自动迁移,新版本启动并重新建立连接
对当前版本执行接管操作等同于重启客户端并重连所有连接。
nssh --takeover
强制接管连接
强制接管跳过确认步骤,直接断开旧连接并启动新进程。
nssh --takeover-force
重启连接
nssh --restart demo@n1.neiwangyun.net:2022
重启所有连接
nssh --restart all
停止连接
nssh --stop demo@n1.neiwangyun.net:2022
使用场景
Web 服务映射
将本地 8000 端口的 Web 服务映射到公网:
nssh --daemon -R 80:127.0.0.1:8000 demo01@n1.neiwangyun.net -p 22 --passwd your_password
数据库服务映射
将本地 MySQL 数据库映射到公网:
nssh --daemon -R 80:127.0.0.1:3306 demo02@n1.neiwangyun.net -p 22 --passwd your_password
SSH 服务映射
将本地 SSH 服务映射到公网:
nssh --daemon -R 80:127.0.0.1:22 demo03@n1.neiwangyun.net -p 22 --passwd your_password
故障排查
No daemon running
原因:守护进程未启动。
处理方式:
nssh --daemon
Connection already exists
原因:该连接 ID 对应的隧道已存在。
处理方式:
nssh --stop demo@n1.neiwangyun.net:2022
Failed to send signal
原因:守护进程未运行或已异常退出。
处理方式:
nssh --daemon
nssh 与 ssh -R 的区别
nssh 与 ssh -R 的能力对比见 nssh 开源。
注意事项
- 连接唯一性:每个连接 ID 仅允许存在一个活跃连接,重复创建将替换旧连接
- 环境变量冲突:避免在系统环境中设置
USERNAME、SERVER_HOST等变量,可能引起参数误判 - 端口冲突:确保本地端口和远程端口未被其他服务占用