Skip to main content

remote

SSH tunnels, ngrok, and remote access management

소스 정보

저장소
alsk1992/CloddsBot
최근 소스 활동
2026년 2월 10일 15:20
감지된 SKILL.md 언어
영어
스타
2,972
포크
359

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
2 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
remote
description
SSH tunnels, ngrok, and remote access management
emoji
🌐
# Remote - Complete API Reference Manage SSH tunnels, ngrok exposure, and remote access to your local Clodds instance. --- ## Chat Commands ### Create Tunnels ``` /remote tunnel ngrok 3000 Expose port via ngrok /remote tunnel cloudflare 3000 Expose via Cloudflare /remote tunnel ssh 3000 user@server SSH tunnel /remote tunnel localtunnel 3000 Expose via localtunnel ``` ### Manage Tunnels ``` /remote list List active tunnels /remote status <id> Check tunnel health /remote url <id> Get tunnel URL /remote close <id> Close tunnel /remote close-all Close all tunnels ``` ### Port Forwarding ``` /remote forward 8080:localhost:3000 Local port forward /remote forward remote 3000:server:80 Remote port forward ``` --- ## TypeScript API Reference ### Create Remote Manager ```typescript import { createRemoteManager } from 'clodds/remote'; const remote = createRemoteManager({ // ngrok auth ngrokAuthToken: process.env.NGROK_AUTH_TOKEN, // Cloudflare tunnel cloudflareToken: process.env.CLOUDFLARE_TUNNEL_TOKEN, // SSH key sshKeyPath: '~/.ssh/id_rsa', // Auto-reconnect autoReconnect: true, reconnectDelayMs: 5000, }); ``` ### Create ngrok Tunnel ```typescript const tunnel = await remote.createNgrokTunnel({ port: 3000, protocol: 'http', // 'http' | 'tcp' | 'tls' // Optional subdomain: 'my-clodds', // Requires paid plan authToken: process.env.NGROK_AUTH_TOKEN, }); console.log(`Public URL: ${tunnel.url}`); console.log(`Tunnel ID: ${tunnel.id}`); ``` ### Create Cloudflare Tunnel ```typescript const tunnel = await remote.createCloudflareTunnel({ port: 3000, hostname: 'clodds.example.com', token: process.env.CLOUDFLARE_TUNNEL_TOKEN, }); console.log(`URL: ${tunnel.url}`); ``` ### Create SSH Tunnel ```typescript const tunnel = await remote.createSshTunnel({ localPort: 3000, remoteHost: 'server.example.com', remotePort: 80, username: 'deploy', privateKey: fs.readFileSync('~/.ssh/id_rsa'), }); console.log(`Tunnel established`); console.log(`Access via: ssh -L 3000:localhost:80 deploy@server.example.com`); ``` ### List Tunnels ```typescript const tunnels = remote.listTunnels(); for (const tunnel of tunnels) { console.log(`${tunnel.id}: ${tunnel.type}`); console.log(` URL: ${tunnel.url}`); console.log(` Port: ${tunnel.port}`); console.log(` Status: ${tunnel.status}`); console.log(` Created: ${tunnel.createdAt}`); } ``` ### Check Status ```typescript const status = await remote.getStatus(tunnelId); console.log(`Status: ${status.status}`); // 'connected' | 'reconnecting' | 'disconnected' console.log(`Uptime: ${status.uptimeMs}ms`); console.log(`Bytes in: ${status.bytesIn}`); console.log(`Bytes out: ${status.bytesOut}`); ``` ### Close Tunnel ```typescript // Close single tunnel await remote.closeTunnel(tunnelId); // Close all tunnels await remote.closeAll(); ``` ### Event Handlers ```typescript remote.on('connected', (tunnel) => { console.log(`Tunnel connected: ${tunnel.url}`); }); remote.on('disconnected', (tunnel) => { console.log(`Tunnel disconnected: ${tunnel.id}`); }); remote.on('error', (tunnel, error) => { console.error(`Tunnel error: ${error.message}`); }); ``` --- ## Tunnel Types | Type | Best For | Requirements | |------|----------|--------------| | **ngrok** | Quick testing | Free account | | **Cloudflare** | Production | Cloudflare account | | **SSH** | Secure access | SSH server | | **localtunnel** | Free, temporary | None | --- ## Use Cases ### Expose Webhook Endpoint ```typescript // Expose local server for webhook testing const tunnel = await remote.createNgrokTunnel({ port: 3000 }); console.log(`Set webhook URL to: ${tunnel.url}/webhooks/trading-signals`); ``` ### Remote Bot Access ```typescript // Access bot from phone while at home const tunnel = await remote.createCloudflareTunnel({ port: 3000, hostname: 'clodds.mysite.com', }); // Now access at https://clodds.mysite.com ``` --- ## Best Practices 1. **Use Cloudflare for production** — More stable than ngrok 2. **Secure with auth** — Don't expose without protection 3. **Monitor connections** — Watch for disconnections 4. **Close unused tunnels** — Don't leave open indefinitely
GitHub에서 보기