远程隧道管理Skill remote

该技能用于管理和配置SSH隧道、ngrok暴露、Cloudflare隧道等远程访问工具,支持端口转发和多种隧道类型,适用于开发、测试和生产环境中的远程部署、Webhook测试和安全访问。关键词:SSH隧道、ngrok、Cloudflare、远程访问、端口转发、DevOps工具、Webhook测试、安全隧道。

DevOps 0 次安装 0 次浏览 更新于 3/9/2026

name: remote description: “SSH隧道、ngrok和远程访问管理” emoji: “🌐”

远程 - 完整API参考

管理SSH隧道、ngrok暴露和远程访问您的本地Clodds实例。


聊天命令

创建隧道

/remote tunnel ngrok 3000                   通过ngrok暴露端口
/remote tunnel cloudflare 3000              通过Cloudflare暴露
/remote tunnel ssh 3000 user@server         SSH隧道
/remote tunnel localtunnel 3000             通过localtunnel暴露

管理隧道

/remote list                                列出活动隧道
/remote status <id>                         检查隧道健康状态
/remote url <id>                            获取隧道URL
/remote close <id>                          关闭隧道
/remote close-all                           关闭所有隧道

端口转发

/remote forward 8080:localhost:3000         本地端口转发
/remote forward remote 3000:server:80       远程端口转发

TypeScript API参考

创建远程管理器

import { createRemoteManager } from 'clodds/remote';

const remote = createRemoteManager({
  // ngrok认证
  ngrokAuthToken: process.env.NGROK_AUTH_TOKEN,

  // Cloudflare隧道
  cloudflareToken: process.env.CLOUDFLARE_TUNNEL_TOKEN,

  // SSH密钥
  sshKeyPath: '~/.ssh/id_rsa',

  // 自动重连
  autoReconnect: true,
  reconnectDelayMs: 5000,
});

创建ngrok隧道

const tunnel = await remote.createNgrokTunnel({
  port: 3000,
  protocol: 'http',  // 'http' | 'tcp' | 'tls'

  // 可选
  subdomain: 'my-clodds',  // 需要付费计划
  authToken: process.env.NGROK_AUTH_TOKEN,
});

console.log(`公共URL: ${tunnel.url}`);
console.log(`隧道ID: ${tunnel.id}`);

创建Cloudflare隧道

const tunnel = await remote.createCloudflareTunnel({
  port: 3000,
  hostname: 'clodds.example.com',
  token: process.env.CLOUDFLARE_TUNNEL_TOKEN,
});

console.log(`URL: ${tunnel.url}`);

创建SSH隧道

const tunnel = await remote.createSshTunnel({
  localPort: 3000,
  remoteHost: 'server.example.com',
  remotePort: 80,
  username: 'deploy',
  privateKey: fs.readFileSync('~/.ssh/id_rsa'),
});

console.log(`隧道已建立`);
console.log(`访问方式: ssh -L 3000:localhost:80 deploy@server.example.com`);

列出隧道

const tunnels = remote.listTunnels();

for (const tunnel of tunnels) {
  console.log(`${tunnel.id}: ${tunnel.type}`);
  console.log(`  URL: ${tunnel.url}`);
  console.log(`  端口: ${tunnel.port}`);
  console.log(`  状态: ${tunnel.status}`);
  console.log(`  创建时间: ${tunnel.createdAt}`);
}

检查状态

const status = await remote.getStatus(tunnelId);

console.log(`状态: ${status.status}`);  // 'connected' | 'reconnecting' | 'disconnected'
console.log(`运行时间: ${status.uptimeMs}毫秒`);
console.log(`输入字节: ${status.bytesIn}`);
console.log(`输出字节: ${status.bytesOut}`);

关闭隧道

// 关闭单个隧道
await remote.closeTunnel(tunnelId);

// 关闭所有隧道
await remote.closeAll();

事件处理程序

remote.on('connected', (tunnel) => {
  console.log(`隧道已连接: ${tunnel.url}`);
});

remote.on('disconnected', (tunnel) => {
  console.log(`隧道已断开: ${tunnel.id}`);
});

remote.on('error', (tunnel, error) => {
  console.error(`隧道错误: ${error.message}`);
});

隧道类型

类型 最佳用途 要求
ngrok 快速测试 免费账户
Cloudflare 生产环境 Cloudflare账户
SSH 安全访问 SSH服务器
localtunnel 免费、临时

使用案例

暴露Webhook端点

// 暴露本地服务器用于Webhook测试
const tunnel = await remote.createNgrokTunnel({ port: 3000 });
console.log(`设置Webhook URL为: ${tunnel.url}/webhooks/trading-signals`);

远程机器人访问

// 在家时从手机访问机器人
const tunnel = await remote.createCloudflareTunnel({
  port: 3000,
  hostname: 'clodds.mysite.com',
});
// 现在可以通过 https://clodds.mysite.com 访问

最佳实践

  1. 生产环境使用Cloudflare — 比ngrok更稳定
  2. 使用认证保护安全 — 不要无保护地暴露
  3. 监控连接 — 注意断开情况
  4. 关闭未使用的隧道 — 不要无限期保持开放