跳到主要内容

nssh 使用

一句话版: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 2022 --passwd your_password

参数说明​

参数说明
--daemon启用守护进程模式,后台运行
--list列出所有运行中的隧道连接
--takeover接管旧版本客户端的连接,执行前会提示二次确认
--takeover-force接管旧版本客户端的连接,跳过确认直接执行
--restart <连接ID|all>重启指定连接,或使用 all 重启全部连接
--stop <连接ID>停止指定连接
-R <远程端口>:<本地地址>:<本地端口>反向隧道配置,格式与 ssh -R 一致
-p <端口>SSH 服务端端口
--passwd <密码>密码认证:直接传密码
-i, --identity <私钥路径>密钥认证:指定 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 客户端发布新版本时,可通过接管功能完成平滑升级:

  1. 下载新版本客户端
  2. 执行接管命令
  3. 根据提示输入 Y 或 y 确认
  4. 旧版本连接信息自动迁移,新版本启动并重新建立连接

对当前版本执行接管操作等同于重启客户端并重连所有连接。

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 2022 --passwd your_password

数据库服务映射​

将本地 MySQL 数据库映射到公网:

nssh --daemon -R 80:127.0.0.1:3306 demo02@n1.neiwangyun.net -p 2022 --passwd your_password

SSH 服务映射​

将本地 SSH 服务映射到公网:

nssh --daemon -R 80:127.0.0.1:22 demo03@n1.neiwangyun.net -p 2022 --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 开源。


注意事项​

  1. 连接唯一性:每个连接 ID 仅允许存在一个活跃连接,重复创建将替换旧连接
  2. 环境变量冲突:避免在系统环境中设置 USERNAME、SERVER_HOST 等变量,可能引起参数误判
  3. 端口冲突:确保本地端口和远程端口未被其他服务占用

相关链接​


记住内网云:一条命令建隧道,守护进程管全部;远程本地写清楚,断线自己重连回。