Prechádzať zdrojové kódy

feat: 添加 SSH 安全隧道命令解析及使用场景示例

zhch158_admin 3 mesiacov pred
rodič
commit
f633b57495
1 zmenil súbory, kde vykonal 149 pridanie a 0 odobranie
  1. 149 0
      zhch/端口转发.md

+ 149 - 0
zhch/端口转发.md

@@ -71,3 +71,152 @@ VS Code 设置
 在设置编辑器中显示
 
 样您就可以通过 VS Code 的内置功能访问远程服务器上的应用(如您的 Gradio 应用),而不需要依赖 ngrok。
+
+
+```
+ssh -i /Users/zhch158/.ssh/id_dotsocr_tunnel -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -L 8082:localhost:8101 -R 7280:localhost:7281 -N ubuntu@10.192.72.11
+```
+这个 SSH 命令是您安全隧道方案的核心,让我详细解释每个参数的作用:
+
+## 🔐 SSH 安全隧道命令解析
+
+```bash
+ssh -i /Users/zhch158/.ssh/id_dotsocr_tunnel \
+    -o ExitOnForwardFailure=yes \
+    -o ServerAliveInterval=30 \
+    -o ServerAliveCountMax=3 \
+    -L 8082:localhost:8101 \
+    -R 7280:localhost:7281 \
+    -N ubuntu@10.192.72.11
+```
+
+### 📋 参数详解
+
+#### 🔑 身份认证
+- **`-i /Users/zhch158/.ssh/id_dotsocr_tunnel`**
+  - 使用专用的 SSH 私钥文件
+  - 这是您为 DotsOCR 隧道专门生成的密钥,确保独占访问
+
+#### ⚙️ 连接选项 (`-o`)
+- **`ExitOnForwardFailure=yes`**
+  - 如果任何端口转发失败,立即终止 SSH 连接
+  - 确保隧道完整性,避免部分失效的连接
+
+- **`ServerAliveInterval=30`**
+  - 每 30 秒发送一次保活信号到服务器
+  - 防止长时间无活动导致连接被防火墙断开
+
+- **`ServerAliveCountMax=3`**
+  - 最多发送 3 次保活信号无响应后断开
+  - 总计 90 秒无响应后自动断开(30秒 × 3次)
+
+#### 🌐 端口转发配置
+
+##### 正向转发 (`-L`)
+```
+-L 8082:localhost:8101
+```
+- **作用**: 本地端口转发
+- **含义**: 
+  - 本机的 `localhost:8082` → 远程服务器的 `localhost:8101`
+  - 在您的 Mac 上访问 `http://localhost:8082` 就相当于访问远程服务器的 vLLM 服务
+
+##### 反向转发 (`-R`)
+```
+-R 7280:localhost:7281
+```
+- **作用**: 远程端口转发(关键的安全改进)
+- **含义**:
+  - 远程服务器的 `localhost:7280` → 您本机的 `localhost:7281`
+  - 注意:这里转发到 7281 端口,而不是直接的 7890
+
+#### 🚫 执行选项
+- **`-N`**
+  - 不执行远程命令,只建立端口转发
+  - 纯隧道模式,不会打开远程 shell
+
+- **`ubuntu@10.192.72.11`**
+  - 连接到远程服务器的用户和地址
+
+## 🛡️ 安全架构图解
+
+```
+您的 Mac (192.168.247.197)          远程服务器 (10.192.72.11)
+┌─────────────────────────┐         ┌─────────────────────────┐
+│                         │         │                         │
+│  🌐 浏览器              │         │  🤖 vLLM 服务           │
+│  localhost:8082 ◄───────┼─────────┼──► localhost:8101       │
+│                         │   SSH   │                         │
+│  🔒 安全代理服务器      │  隧道   │  其他用户进程           │
+│  localhost:7281 ◄───────┼─────────┼──► localhost:7280       │
+│         │               │         │         │               │
+│         ▼               │         │         ▼               │
+│  🎯 本地代理            │         │    ❌ 被拒绝           │
+│  localhost:7890         │         │   (安全检查失败)        │
+│  (Clash/V2Ray等)        │         │                         │
+└─────────────────────────┘         └─────────────────────────┘
+```
+
+## 🔧 与您的 secure_tunnel.py 的配合
+
+### 1. 配置文件对应关系
+
+```python
+# secure_tunnel.py 中的配置
+{
+    "local_forward_port": 8082,      # 对应 -L 8082:localhost:8101
+    "remote_service_port": 8101,     # 远程 vLLM 服务端口
+    "secure_proxy_port": 7281,       # 对应 -R 7280:localhost:7281
+    "target_proxy_host": "127.0.0.1",
+    "target_proxy_port": 7890        # 最终的代理目标
+}
+```
+
+### 2. 安全流程
+
+1. **远程服务器上的进程**访问 `localhost:7280`
+2. **SSH 隧道**将请求转发到您本机的 `localhost:7281`
+3. **安全代理服务器**(secure_tunnel.py)在 7281 端口监听
+4. **进程检查**:验证请求是否来自允许的进程(VS Code、Copilot)
+5. **条件转发**:只有合法请求才转发到 `localhost:7890`(您的真实代理)
+
+## 🚀 使用场景示例
+
+### 场景 1: 您使用 VS Code + Copilot
+```bash
+# 远程服务器上的 vLLM 进程请求代理
+curl http://localhost:7280/some-api
+
+# 流程:
+# 1. 请求到达远程服务器的 7280 端口
+# 2. SSH 隧道转发到您本机的 7281 端口
+# 3. 安全代理检测到 VS Code 进程运行 ✅
+# 4. 转发请求到本机的 7890 端口(真实代理)
+# 5. 返回响应
+```
+
+### 场景 2: 其他用户尝试访问
+```bash
+# 其他用户在远程服务器执行
+curl http://localhost:7280/some-api
+
+# 流程:
+# 1. 请求到达远程服务器的 7280 端口
+# 2. SSH 隧道转发到您本机的 7281 端口
+# 3. 安全代理检测:没有 VS Code 进程 ❌
+# 4. 返回 HTTP 403 Forbidden
+# 5. 记录访问日志
+```
+
+## 🎯 总结
+
+这个命令实现了一个**双向安全隧道**:
+
+1. **正向隧道**:让您在本机访问远程的 vLLM 服务
+2. **反向隧道**:为远程服务器提供受控的代理访问
+3. **安全控制**:通过中间代理层实现访问权限控制
+4. **进程绑定**:只有特定进程才能使用代理服务
+
+这样既解决了您的网络代理需求,又确保了安全性!🛡️✨
+
+找到具有 1 个许可证类型的类似代码