Cloudflare Tunnel 映射 SSH 服务时遇到 'websocket: bad handshake' 错误如何解决?

新手上路,请多包涵

大佬们,我的cloudflared的隧道访问映射ssh服务, 使用就会出现错误: ERR failed to connect to origin error="websocket: bad handshake" originURL=https://* 该怎么解决啊

.

阅读 860
avatarAI BotBETA

遇到 Cloudflare Tunnel 在映射 SSH 服务时出现 "websocket: bad handshake" 错误,通常是因为 SSH 协议(基于 TCP)与 Cloudflare Tunnel 使用的 WebSocket 协议之间不兼容所导致的。Cloudflare Tunnel 主要设计用于支持 HTTP/HTTPS 流量,而不是直接支持 SSH 或其他非 HTTP/HTTPS 协议。

解决方案

  1. 使用 SSH 转发:

    • 通过 HTTP 隧道转发 SSH: 你可以设置一个小的 HTTP 服务(如使用 Nginx、Apache 或简单的 Node.js/Python 服务器),该服务监听在 Cloudflare Tunnel 暴露的端口上,并接受 HTTP 请求。然后,你可以在这个 HTTP 服务中嵌入 SSH 转发逻辑。例如,你可以使用 sshuttleautossh 或自定义的 WebSocket 到 SSH 桥接工具。
    • SSH 代理: 在本地或云服务器上设置一个 SSH 代理(如 ssh -N -f -D localhost:8080 remote_server),然后使用 SOCKS5 代理客户端(如 PuTTY、OpenSSH 的 ProxyCommand)来通过 Cloudflare Tunnel 访问的 HTTP 服务连接到这个 SSH 代理。
  2. 使用 VPN 或直接连接:

    • 如果可能,考虑使用 VPN 或直接网络连接来访问 SSH 服务,而不是通过 Cloudflare Tunnel。
  3. 修改 Cloudflare Tunnel 配置:

    • 确保你的 Cloudflare Tunnel 配置正确,特别是 originURL 应该指向一个能处理 WebSocket 连接的 HTTP/HTTPS 服务。
    • 如果你正在尝试通过非标准端口或协议映射 SSH,这通常不是 Cloudflare Tunnel 的直接支持场景。
  4. 查看日志和调试:

    • 查看 Cloudflare Dashboard 中的 Tunnel 日志,以获取更多关于错误的详细信息。
    • 在你的本地或服务器端,检查 SSH 服务的日志,看是否有任何相关的错误或拒绝连接的日志。
  5. 咨询 Cloudflare 支持:

    • 如果上述步骤都不能解决问题,考虑联系 Cloudflare 支持获取帮助。

示例:使用 SSH 代理和 SOCKS5 客户端

  1. 设置 SSH 代理:

    ssh -N -f -D localhost:8080 your_ssh_server
  2. 配置 PuTTY 使用 SOCKS5 代理:

    • 打开 PuTTY,在左侧的 “Connection” -> “SSH” -> “Tunnels” 中添加一个新的动态端口转发(Dynamic),设置 Source port 为 8080
    • 连接到你的 SSH 代理服务器。
  3. 在 PuTTY 中配置 SOCKS5 代理:

    • 在 “Session” 中配置你的 SSH 目标服务器地址和端口(但实际上是通过 SOCKS5 代理连接的)。
    • 连接后,你可以通过 PuTTY 访问 SSH 目标服务器上的资源,就像直接连接一样。

希望这些信息能帮助你解决问题!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏