在端口 443 上运行多个服务,通过 HTTPS 建立 SSH 隧道

在端口 443 上运行多个服务,通过 HTTPS 建立 SSH 隧道

情况: 我想通过 HTTPS 隧道传输 SSH 会话。我的防火墙/代理非常严格,仅允许 HTTP、FTP 和 HTTPS 流量。

有效的方法: 通过代理设置隧道到远程 Linux 机器,该机器的 sshd 监听端口 443

问题: 我必须在端口 443 上运行一个 Web 服务器 (lighty)。代理禁止到其他端口的 HTTPS 流量。

目前的想法: 设置虚拟主机并将所有传入请求代理到本地主机:(例如 22)

$HTTP["host"] == "tunnel.mylinux.box" {                                         
    proxy.server = (                                                            
        "" => (("host" => "127.0.0.1", "port" => 22))                           
    )                                                                           
}

不幸的是,这行不通。是我做错了什么吗?还是有什么原因导致这行不通?

答案1

你可以使用一些 Perl 来实现这个技巧:

sslh - 在 SSH 和 SSL/HTTPS 服务器之间切换传入连接

答案2

你可能想看看sslh 的 C 实现

来自网站:

sslh 允许在同一端口上接受 HTTPS 和 SSH 连接。它允许连接到端口 443 上的 SSH 服务器(例如从企业防火墙内部),同时仍在该端口上提供 HTTPS。此功能已作为 Perl 脚本实现。

sslh 有两个问题:
- 它用 Perl 编写。这意味着它占用大量内存,而且速度可能不是很快。
- 它不管理特权删除,这一点值得怀疑。

这两个问题的明显解决办法是用 C 重新实现它,这也是本程序的目的所在。

相关内容