समीपस्थ और nginx के साथ HTTPS पर SSH


15

मैं nginx का उपयोग करके https कनेक्शन पर ssh सेटअप करने का प्रयास कर रहा हूं। मुझे कोई काम करने के उदाहरण नहीं मिले हैं, इसलिए किसी भी मदद की सराहना की जाएगी!

~$ 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 user@example.net
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

सर्वर पर नग्नेक्स कॉन्फिग;

~$ 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 "-" "-"

जवाबों:


10

Nginx आगे प्रॉक्सी अनुरोधों (HTTP कनेक्ट विधि) का समर्थन नहीं करता है, यही कारण है कि आपको Nginx से "खराब अनुरोध" प्रतिक्रिया मिलती है। Proxytunnel Nginx से कनेक्ट करने में सक्षम है, लेकिन वहां से यह बंद हो जाता है। AFNIF के नगनेक्स लेखकों के पास आगे के प्रॉक्सी अनुरोधों का समर्थन करने की कोई योजना नहीं है, क्योंकि वे वास्तव में एचटीटीपी की सेवा में विशेष होना पसंद करते हैं। अपाचे में बाकी सभी चीजों के लिए मॉड्यूल हैं, जो आपको उन विदेशी सुविधाओं का उपयोग करने की स्वतंत्रता देता है।

आप sslh को देख सकते हैं , जो आने वाले ट्रैफ़िक को पोर्ट 443 में या तो Nginx (127.0.0.1:443 पर सुनकर), SSH या OpenVPN पर मल्टीप्लेक्स कर सकता है। सुनिश्चित करें कि आपको अंदर आने sslhऔर पर नहीं सार्वजनिक आईपी पते पर सुनने के लिए, 0.0.0.0के साथ कि ओवरलैप के रूप में 127.0.0.1:433जहां Nginx सुन रहा है।

एक अन्य विकल्प स्क्विड का उपयोग कर रहा है, लेकिन मुझे वहां कोई अनुभव नहीं है।


0

मैंने इस तरह का सेटअप कभी नहीं देखा है और मुझे संदेह है कि यह काम कर सकता है, क्योंकि nginx आने वाले कनेक्शन को HTTP के रूप में व्यवहार करने और HTTP के साथ अपस्ट्रीम पर बात करने में सक्षम होने की उम्मीद करता है। आप nginx के माध्यम से प्रॉक्सी क्यों करना चाहते हैं?


2
यह संभव होना चाहिए - एसएसएक्स सत्रों का उपयोग HTTP (एस) प्रॉक्सी के माध्यम से सुरंग के लिए किया जाता है, यहां अपाचे का उपयोग कर इसे कॉन्फ़िगर करने के लिए सेटअप है
थर्मिओनिक्स

अपाचे वहाँ एक वास्तविक HTTP प्रॉक्सी के रूप में काम कर रहा है, जो मुझे नहीं लगता कि nginx का समर्थन करता है (केवल रिवर्स प्रिक्सिंग)।
मॉर्गन

0

यह पुराना सवाल है, लेकिन अभी भी वास्तविक :-)

जैसा कि दूसरों ने उल्लेख किया है कि यह सेटअप शायद ही उपलब्ध हो, क्योंकि नगनेक्स में HTTP CONNECT विधि उपलब्ध नहीं है।

नोट: Apache वेब सर्वर इस सेटअप का समर्थन करता है।

लेकिन, Nginx के लिए समाधान है बिना sslh मुझे लगता है कि कस्टम Nginx मॉड्यूल के रूप में है जो HTTP कनेक्शन लागू करता है: https://github.com/chobits/ngx_http_proxy_connect_mnule

इसका उपयोग करके आप अपने ssh config में केवल ProxyCommand को ठीक से उपयोग करने में सक्षम होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.