|
|
@@ -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 个许可证类型的类似代码
|