Nodejs SSH 反向隧道 Web 管理工具
Nodejs SSH 反向隧道 Web 管理工具
用 Node.js 写的,大家可以自己 clone 下去用哈。
大致的应用场景是:撸主有个人呢要做微信联调但是万恶的移动宽带没给分配公网ip,所以只能反向到自己的vps的某个端口,然后vps上面再用nginx反向代理到80端口。
这个工具的用处就是反向隧道过去,虽然命令行就能完事,但是这货她呢不想用命令行 0. 0
以及,她是在 Windows 下面的,所以目前我还没写 Linux 的版本,大家有兴趣也可以一起来完善什么的哈~
以及 Repo 在:
Nodejs SSH 反向隧道 Web 管理工具
用 Node.js 写的,大家可以自己 clone 下去用哈。
应用场景
大致的应用场景是:撸主有个人呢要做微信联调但是万恶的移动宽带没给分配公网IP,所以只能反向到自己的VPS的某个端口,然后VPS上面再用Nginx反向代理到80端口。这个工具的用处就是反向隧道过去,虽然命令行就能完事,但是这货她呢不想用命令行 0.0
工具介绍
该工具允许用户通过Web界面来管理SSH反向隧道,无需使用命令行操作。目前该工具主要在Windows环境下运行,不过如果你有兴趣,欢迎一起来完善Linux版本。
使用示例
-
安装依赖: 首先需要安装一些必要的Node.js模块。例如,
ssh2
是一个用于建立SSH连接的库。npm install express ssh2 body-parser
-
创建服务器: 创建一个简单的Express应用,用于处理Web请求,并与SSH隧道进行交互。
const express = require('express'); const bodyParser = require('body-parser'); const { Client } = require('ssh2'); const app = express(); app.use(bodyParser.json()); app.post('/create-tunnel', (req, res) => { const { host, port, username, password } = req.body; const sshClient = new Client(); sshClient.on('ready', () => { console.log('SSH Connection established'); sshClient.forwardOut( '127.0.0.1', // Local address to bind 9000, // Local port to bind '127.0.0.1', // Remote address to connect 80, // Remote port to connect (err, stream) => { if (err) throw err; console.log('Tunnel created'); res.send({ message: 'Tunnel created successfully' }); } ); }).connect({ host, port, username, password }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
-
前端页面: 前端可以是一个简单的HTML表单,用于输入SSH连接信息(如主机名、端口、用户名和密码)。
<!DOCTYPE html> <html> <head> <title>SSH Tunnel Manager</title> </head> <body> <h1>Create SSH Reverse Tunnel</h1> <form id="tunnelForm"> <label for="host">Host:</label> <input type="text" id="host" name="host" required><br> <label for="port">Port:</label> <input type="number" id="port" name="port" required><br> <label for="username">Username:</label> <input type="text" id="username" name="username" required><br> <label for="password">Password:</label> <input type="password" id="password" name="password" required><br> <button type="submit">Create Tunnel</button> </form> <script> document.getElementById('tunnelForm').addEventListener('submit', async (event) => { event.preventDefault(); const formData = new FormData(event.target); const response = await fetch('/create-tunnel', { method: 'POST', body: JSON.stringify(Object.fromEntries(formData)), headers: { 'Content-Type': 'application/json' } }); const data = await response.json(); alert(data.message); }); </script> </body> </html>
-
运行项目: 运行Node.js服务器,并通过浏览器访问前端页面来创建SSH反向隧道。
GitHub Repo
该工具的代码托管在GitHub上,欢迎贡献和反馈:
希望这个简单的示例能帮助你理解和使用该工具!
Nodejs SSH 反向隧道 Web 管理工具
这个项目是用 Node.js 编写的,旨在提供一个图形界面来管理 SSH 反向隧道。应用场景主要是当用户需要进行某些服务(例如微信联调)时,但由于使用的是移动宽带,没有公网 IP 地址,因此无法直接访问。
功能介绍
- SSH 反向隧道: 将本地服务通过 SSH 隧道转发到远程服务器的指定端口。
- Web 管理界面: 提供了一个基于浏览器的界面,让用户可以方便地配置和管理隧道。
- 跨平台支持: 虽然当前主要支持 Windows,但后续计划增加对 Linux 的支持。
使用场景
假设你有一个微信开发需要调试,但是你的本地网络没有公网 IP,那么你可以通过这个工具将本地服务反向隧道到你的 VPS 上,并通过 Nginx 反向代理到标准的 HTTP 端口 (如 80)。
示例代码
以下是一个简单的示例代码,展示如何通过 Node.js 实现一个基本的 SSH 反向隧道:
const { Client } = require('ssh2');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
let tunnel;
app.post('/start-tunnel', (req, res) => {
const { host, user, password, localPort, remotePort } = req.body;
const conn = new Client();
conn.on('ready', () => {
console.log('SSH Connection ready');
tunnel = conn.forwardOut(
'127.0.0.1',
localPort,
'0.0.0.0',
remotePort,
(err, stream) => {
if (err) throw err;
console.log(`Tunnel started from ${localPort} to ${remotePort}`);
}
);
}).connect({
host: host,
username: user,
password: password
});
conn.on('end', () => {
console.log('SSH Connection ended');
});
res.send({ message: 'Tunnel started' });
});
app.listen(3000, () => console.log('Server running on port 3000'));
上述代码中:
ssh2
库用于创建 SSH 连接并建立反向隧道。express
库用于创建一个简单的 Web 服务器,提供 RESTful API 来启动和停止隧道。
安装与运行
- 克隆仓库并安装依赖:
git clone https://github.com/XadillaX/ssunneljs.git cd ssunneljs npm install
- 启动服务:
node app.js
- 打开浏览器访问
http://localhost:3000
,使用 RESTful API 或者前端页面来管理和配置 SSH 反向隧道。
源码仓库
你可以在这个 GitHub 仓库中找到完整的代码和文档: https://github.com/XadillaX/ssunneljs
希望这个示例对你有所帮助!如果有任何问题或建议,请随时反馈。