在我的工作场所,流量阻塞器/防火墙越来越糟糕了。我无法通过22端口连接到家里的计算机,缺乏ssh访问让我感到沮丧。以前我可以通过将SSH移动到5050端口来使用它,但我认为一些最近的过滤器现在将这个流量视为即时消息,并通过另一个代理重定向它。那是我最好的猜测;无论如何,我的ssh连接现在在我登录之前就中断了。
这些日子里,我一直在使用Ajaxterm通过HTTPS,因为443端口仍然没有被修改,但这远非理想。(差劲的终端仿真、缺乏端口转发、我的浏览器以惊人的速度泄漏内存...)我尝试在mod_ssl上设置mod_proxy_connect,想通过HTTPS发送“CONNECT localhost:22 HTTP/1.1”请求,然后我就能搞定了。不幸的是,这似乎行不通;HTTPS连接起作用,直到我完成发送请求,然后SSL出了问题。看起来,mod_proxy_connect接管了整个连接,而不是继续通过mod_ssl进行管道传输,使HTTPS客户端感到困惑。
有没有办法让它正常工作?我不想通过纯HTTP进行此操作,有几个原因:
- 留下一个巨大的开放代理是很烂的
- 一个巨大的开放代理在HTTPS上也不好,但需要身份验证,我感觉还可以
- HTTP通过代理——我对我的流量被嗅探并不太担心,因为它将通过隧道以“明文”形式传输ssh——但它更容易被篡改,而HTTPS则基本上不能被代理。
要求:
- 必须在443端口上正常工作,并且不干扰其他HTTPS流量(即我不能只将SSH服务器放在443端口上,因为我将无法再通过HTTPS提供页面)。
- 我已经或者可以编写一个简单的端口转发客户端,可在Windows(或Cygwin)下运行。
编辑
DAG: 在HTTP(S)上隧道传输SSH被指出,但它并没有帮助:在文章末尾,他们提到Bug 29744 - CONNECT does not work over existing SSL connection 阻止了HTTPS隧道传输,这正是我遇到的问题。此时,我可能需要考虑使用一些CGI脚本,但如果有更好的解决方案,我就不想把它列为要求。
(echo -ne "CONNECT localhost:22 HTTP 1.1\r\nHost: proxy.fqdn\r\nProxy-Connection: Keep-Alive\r\n\r\n" && cat) | openssl s_client -quiet -connect proxy.fqdn:443
对我来说作为OpenSSH ProxyCommand起作用。 - Mark