A Python library and CLI tool for managing NPS (djylb/nps) proxy servers
Project description
nps-ctl
一个用于管理 NPS 代理服务器的 Python 库和命令行工具。
注意: 本项目基于 djylb/nps,这是原版 ehang-io/nps(自 2021 年起停止维护)的活跃维护分支。API 兼容两个分支,但推荐使用 djylb/nps。
本项目会根据需求持续迭代,我也无意搞开源再闭源,请不要为了存档而 fork。如果觉得好用,欢迎加个 Star。
功能特性
- API 客户端:类型安全的 NPS HTTP API Python 封装
- 多节点支持:通过统一界面管理多台 NPS 边缘服务器
- 集群同步:跨边缘节点同步客户端、隧道和域名映射
- NPC 部署:通过 SSH 安装、配置和管理 NPC 客户端
- 命令行工具:Rich 终端界面,支持所有操作
- 最小依赖:仅需 rich 用于终端输出
安装
pip install nps-ctl
可选:SOCKS5 代理支持
pip install nps-ctl PySocks
快速开始
作为库使用
from nps_ctl import NPSClient
# 连接到单台 NPS 服务器
client = NPSClient(
base_url="https://nps.example.com",
auth_key="your_auth_key"
)
# 列出所有客户端
clients = client.list_clients()
for c in clients:
print(f"{c['Id']}: {c['VerifyKey']}")
# 添加新客户端
client.add_client(remark="my-server", vkey="unique-key")
作为命令行工具
# 查看所有边缘节点状态
nps-ctl status
# 列出指定边缘节点的客户端
nps-ctl client list --edge nps-asia
# 从一个边缘节点同步配置到其他所有节点
nps-ctl sync --from nps-asia
# 向所有边缘节点添加域名映射
nps-ctl add-host --domain app.example.com --client my-server --target :8080
# 从 clients.toml 推送客户端配置到边缘节点
nps-ctl npc client-push
# 检查各机器上的 NPC 客户端状态
nps-ctl npc status
配置
创建 config/edges.toml 文件:
[edges.nps-asia]
api_url = "https://nps-asia.example.com"
auth_key = "your_auth_key"
region = "Asia"
[edges.nps-us]
api_url = "https://nps-us.example.com"
auth_key = "your_auth_key"
region = "US"
可选,创建 config/clients.toml 用于 NPC 客户端管理:
[clients.my-server]
ssh_host = "user@my-server.example.com"
vkey = "unique-verify-key"
edges = ["nps-asia", "nps-us"]
API 参考
NPSClient
单节点 NPS 服务器客户端。
list_clients()- 获取所有客户端add_client()- 添加新客户端edit_client()- 修改客户端del_client()- 删除客户端list_tunnels()- 获取所有隧道add_tunnel()- 添加新隧道list_hosts()- 获取所有域名映射add_host()- 添加新域名映射
NPSCluster
多节点管理器。
get_all_clients()- 从所有节点获取客户端sync_from()- 从源边缘节点同步配置到目标节点broadcast_host()- 向所有节点添加域名映射
开发
# 安装开发依赖
pip install -e ".[dev,test]"
# 代码检查和类型检查
make lint
# 运行测试
make test
# 构建包
make build
许可证
GPL-3.0 — 详见 LICENSE。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nps_ctl-0.4.0.tar.gz.
File metadata
- Download URL: nps_ctl-0.4.0.tar.gz
- Upload date:
- Size: 70.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f62ed1b689570adbb85af7d070ab852fd2cff81268916b4db07233e0236f8502
|
|
| MD5 |
55e072dca7553d5d438940e6c1b16860
|
|
| BLAKE2b-256 |
4e1ccce33b59d7d019d90784f355f8c8aee41576682a3be019c73b0112f79e94
|
File details
Details for the file nps_ctl-0.4.0-py3-none-any.whl.
File metadata
- Download URL: nps_ctl-0.4.0-py3-none-any.whl
- Upload date:
- Size: 77.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06a1f59e7d57baa73e27dd77c0e587dad2fb4894e2db18318fd4fce29e4ec8d3
|
|
| MD5 |
ff607fcb6cba508aefb8ce76fd49f662
|
|
| BLAKE2b-256 |
39d76f3f3527e4e709709fb6c9d37b12994eec30cfa4a9a75228ab2096099062
|