使用代理通道和nginx通过HTTPS SSH

我试图通过https连接使用nginx设置SSH。 我还没有find任何工作的例子,所以任何帮助,将不胜感激!

~$ cat .ssh/config Host example.net Hostname example.net ProtocolKeepAlives 30 DynamicForward 8118 ProxyCommand /usr/bin/proxytunnel -p ssh.example.net:443 -d localhost:22 -E -v -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)" ~$ ssh [email protected] Local proxy ssh.example.net resolves to 115.xxx.xxx.xxx Connected to ssh.example.net:443 (local proxy) Tunneling to localhost:22 (destination) Communication with local proxy: -> CONNECT localhost:22 HTTP/1.0 -> Proxy-Connection: Keep-Alive -> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32) <- <html> <- <head><title>400 Bad Request</title></head> <- <body bgcolor="white"> <- <center><h1>400 Bad Request</h1></center> <- <hr><center>nginx/1.0.5</center> <- </body> <- </html> analyze_HTTP: readline failed: Connection closed by remote host ssh_exchange_identification: Connection closed by remote host 

服务器上的Nginxconfiguration

 ~$ cat /etc/nginx/sites-enabled/ssh upstream tunnel { server localhost:22; } server { listen 443; server_name ssh.example.net; location / { proxy_pass http://tunnel; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_redirect off; } ssl on; ssl_certificate /etc/ssl/certs/server.cer; ssl_certificate_key /etc/ssl/private/server.key; } ~$ tail /var/log/nginx/access.log 203.xxx.xxx.xxx - - [08/Feb/2012:15:17:39 +1100] "CONNECT localhost:22 HTTP/1.0" 400 173 "-" "-" 

Nginx不支持转发代理请求(HTTP CONNECT方法),这就是为什么你得到Nginx的“错误请求”响应。 Proxytunnel能够连接到Nginx,但是从那里停止。 Nginx的作者AFAIF没有计划支持转发代理请求,因为他们喜欢专门提供HTTP服务。 Apache拥有所有其他模块,让您可以自由使用这些奇特的function。

您可以看看sslh ,它可以将端口443的传入stream量复用到Nginx(监听127.0.0.1:443),SSH或OpenVPN。 确保你让sslh监听公共IP地址,而不是0.0.0.0因为这与Nginx正在监听的127.0.0.1:433重叠。

另一种select是使用Squid,但我没有经验。

我从来没有见过这种设置,我怀疑它可以工作,因为nginx希望能够将传入的连接视为HTTP,并用HTTP与上游交谈。 你为什么要通过nginx代理?

这是一个老问题,但仍然是实际的:-)

正如其他人所说,由于缺乏Nginx的HTTP CONNECT方法,这个设置几乎不可用。

注:Apache Web服务器支持此设置。

但是,对于Nginx的解决scheme没有sslh我想以自定义Nginx模块的forms实现HTTP连接: https : //github.com/chobits/ngx_http_proxy_connect_module

通过使用这个你应该能够正确使用你的SSHconfiguration只有ProxyCommand。