情况: 我想通过 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 来实现这个技巧:
答案2
你可能想看看sslh 的 C 实现。
来自网站:
sslh 允许在同一端口上接受 HTTPS 和 SSH 连接。它允许连接到端口 443 上的 SSH 服务器(例如从企业防火墙内部),同时仍在该端口上提供 HTTPS。此功能已作为 Perl 脚本实现。
sslh 有两个问题:
- 它用 Perl 编写。这意味着它占用大量内存,而且速度可能不是很快。
- 它不管理特权删除,这一点值得怀疑。这两个问题的明显解决办法是用 C 重新实现它,这也是本程序的目的所在。