เป็นไปได้หรือไม่ที่ SSH ผ่านพอร์ต 80


20

ฉันอยู่หลังไฟร์วอลล์เครือข่ายที่ไม่ให้ฉันผ่านพอร์ตเริ่มต้น ด้วยเหตุนี้ฉันไม่สามารถผลักสาขา bzr ใด ๆ ไปยังที่เก็บของฉัน ฉันอยากจะรู้ว่ามันเป็นไปได้ที่จะพร็อกซี ssh ผ่านพอร์ต 80 เพื่อให้สามารถผลักสาขาได้หรือไม่

ฉันได้ยินว่าเหล็กไขจุกช่วยให้คุณทำอย่างนั้น แต่ฉันไม่แน่ใจว่าจะทำอย่างไร

หากคุณรู้ว่าพร็อกซีเซิร์ฟเวอร์ที่ใช้งานได้ให้ทำเช่นนั้นโปรดพูดถึงมัน


2
man sshเผยให้เห็นพอร์ต: โฮสต์: hostport ดังนั้นลองssh 80:server.comหรือดังนั้น
MarkovCh1

ใช้สำหรับตั้งค่าอุโมงค์ผ่าน -L หรือ -R ดังนั้นคุณต้องใช้กล่องอื่นเพื่อเจาะผ่าน
แมกนีเซียม

1
ดูเพิ่มเติมที่unix.stackexchange.com/a/190612/4319
imz - Ivan Zakharyaschev

คำตอบ:


19

ไฟร์วอลล์ของ บริษัท ที่ดีจะตรวจสอบปริมาณการใช้งานโดยไม่คำนึงถึงพอร์ตดังนั้นการเปลี่ยนพอร์ตอาจไม่ทำงาน

หากคุณมีการควบคุมเซิร์ฟเวอร์และยังต้องการลองคุณสามารถเปลี่ยนพอร์ต sshd เป็นพอร์ต 80 คำเตือนหากคุณมีสิ่งอื่นที่ทำงานบนพอร์ต 80 (บนเซิร์ฟเวอร์) สิ่งนี้จะไม่ทำงานและอาจหมายความว่าคุณสมบูรณ์ สูญเสีย SSH เข้าถึงเซิร์ฟเวอร์!

คุณจะต้องแก้ไข/etc/ssh/sshd_configและการเปลี่ยนแปลงไปPort 80จากนั้นเรียกใช้

sudo restart ssh

จากนั้นเชื่อมต่อ:

ssh user@host -p80

เส้นทาง bzr ของคุณจะมีลักษณะดังนี้: bzr+ssh://host:80/path/


อีกวิธีคือใช้ WebDav สิ่งนี้ควรแก้ไขปัญหาไฟร์วอลล์อย่างสมบูรณ์เพราะทุกอย่างเกิดขึ้นบนพอร์ต 80 แต่คุณจะต้องใช้ Apache และตั้งค่าหลายอย่าง:

  1. รับ WebDav ติดตั้ง
  2. ย้ายสาขาของคุณไปยังสถานที่ที่เหมาะสม
  3. ใช้ปลั๊กอินbzr-webdavเพื่อเชื่อมต่อ

VPN อาจเป็นตัวเลือก แต่หากsshถูกปิดกั้นฉันคาดว่าจะถูกยกเว้นด้วย

คุณอาจต้องการคำกับผู้ดูแลระบบเครือข่ายของคุณ คุณต้องทำอะไรสักอย่างแล้วพวกเขาก็หยุดคุณ หากพวกเขามีเหตุผลในการบล็อกsshอาจเป็นไปได้ว่าพวกเขาจะพยายามอย่างสุดขีดที่จะหลีกเลี่ยงมันในทางลบ ...

พูดสั้น ๆ ก็อาจปลอดภัยกว่าที่จะคุยกับพวกเขา


7
+1 เพื่อพูดคุยเกี่ยวกับความต้องการของคุณกับแผนกไอทีของคุณ ในหลาย ๆ สภาพแวดล้อมเหมืองรวมกิจกรรมประเภทนี้จะเป็นเหตุให้ยุติ
Panther

1
นอกจากนี้ถ้าเขาจะทำให้เซิร์ฟเวอร์ ssh ฟังบนพอร์ตอื่นเขาสามารถทำให้ฟังทั้งพอร์ต 22 และ 80 โดยมีสองPortบรรทัดโดยมีหนึ่งบรรทัดสำหรับแต่ละพอร์ตใน/etc/ssh/sshd_configไฟล์
Azendale

ฉันจะหลีกเลี่ยงการทำรายการ (รายการยาวและการอภิปรายบางรายการในนั้นจะได้รับทางการเมืองอย่างรวดเร็ว) แต่คำถามนี้ครอบคลุมหลาย ๆสถานการณ์นอกเหนือจากพนักงานที่พยายามหลีกเลี่ยงนโยบายของ บริษัท ที่ดำเนินการอย่างซื่อสัตย์ แผนกไอทีของ บริษัท ฉันทุกคนกำลังพูดถึงความต้องการในการทำงานกับไอที แต่ก็ไม่สามารถนำมาใช้ได้เสมอและบางครั้งแผนกไอทีก็ตอบกลับด้วยว่า "ไม่เป็นไร แต่เราไม่ได้เปลี่ยนแปลงอะไรเลยเพื่อรองรับคุณ" แยกเป็นไปได้ค่อนข้างที่พอร์ต 22 ถูกบล็อกโดย VPN ไม่ใช่ดังนั้นฉันคิดว่าคุ้มค่าที่จะลอง
Eliah Kagan

@Panther จากนั้นบางคนก็จะมีความสุขกว่าที่จะยุติระบอบการปกครองขององค์กรนั้น
NeverEndingQueue

15

SSH ผ่านพร็อกซี

หากไฟร์วอลล์ให้คุณคุณสามารถเรียกใช้ ssh ไปยังพอร์ตใดก็ได้ แต่ต้องใช้เซิร์ฟเวอร์ ssh เพื่อฟังพอร์ตนั้น พอร์ต 80 ไม่น่าใช้งานได้เนื่องจากสถานที่ส่วนใหญ่ที่มีไฟร์วอลล์วิเคราะห์ปริมาณการใช้งานบนพอร์ตนั้นและบล็อกสิ่งที่ไม่ใช่ HTTP แต่พอร์ต 443 ซึ่งมักจะเป็นพอร์ต HTTPS มักใช้งานได้เนื่องจาก SSH และ HTTPS มีลักษณะคล้ายกันมากในการกรองซอฟต์แวร์ดังนั้นเซสชัน SSH ของคุณจะดูเหมือนเซสชัน HTTPS (เป็นไปได้ที่จะแยกความแตกต่าง HTTPS และ SSH ดังนั้นสิ่งนี้จะไม่ทำงานหากไฟร์วอลล์มีความซับซ้อนเพียงพอ)

หากคุณสามารถควบคุมเซิร์ฟเวอร์ให้ทำการฟังบนพอร์ต 443 นอกเหนือจาก 22 (พอร์ต ssh ปกติ) คุณสามารถกำหนดค่าพอร์ตใน/etc/ssh/sshd_config: เพิ่มบรรทัด

Port 443

นอกเหนือจากPort 22ที่ควรมีอยู่แล้ว โปรดทราบว่านี่ถือว่าเซิร์ฟเวอร์ ssh ไม่ใช่เซิร์ฟเวอร์ HTTPS หากเป็นเช่นนั้นคุณจะต้องค้นหาพอร์ตอื่นที่ไฟร์วอลล์ให้คุณใช้หรือค้นหาเซิร์ฟเวอร์ ssh อื่น (ดูการส่งต่อด้านล่าง)

หากคุณไม่จำเป็นต้องตั้งค่าเว็บพรอกซีในเว็บเบราว์เซอร์ของคุณคุณสามารถลองเชื่อมต่อได้โดยตรง:

ssh -p 443 myserver.example.com

หากใช้งานได้ให้กำหนดนามแฝงใน~/.ssh/config:

Host myserver
HostName myserver.example.com
Port 443

หากคุณต้องการตั้งค่าเว็บพร็อกซีในเว็บเบราว์เซอร์ของคุณบอก ssh ให้ผ่านพร็อกซี ติดตั้งเกลียว กำหนดนามแฝงเช่นนี้ในของคุณ~/.ssh/configโดยที่http://proxy.acme.com:3128/พร็อกซีที่คุณใช้สำหรับ HTTPS เป็นภายนอก (แทนที่ด้วยชื่อโฮสต์และพอร์ตที่เหมาะสม):

Host myserver
HostName myserver.example.com
Port 443
ProxyCommand /usr/bin/corkscrew proxy.acme.com 3128 %h %p

SSH มากกว่า SSH

หากคุณสามารถไปยังเครื่องภายนอกโดยใช้หนึ่งในเทคนิคด้านบน แต่ไม่ใช้กับเครื่องที่คุณสนใจให้ใช้เพื่อส่งต่อการเชื่อมต่อ สมมติว่าคุณสามารถ ssh กับเครื่องที่เรียกว่าmygatewayและคุณต้องการเข้าถึงเซิร์ฟเวอร์ SSH บนmytargetติดตั้งnetcat-openbsdบนmygateway(หรือถ้าไม่ได้ใช้งาน Ubuntu ให้แน่ใจว่ามันมีncคำสั่ง) ใส่สิ่งนี้ใน~/.ssh/config:

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH ไปยัง Apache

หากโฮสต์ที่คุณต้องการเชื่อมต่อกำลังใช้งาน Apache และกำลังฟังพอร์ต 443 อยู่และคุณสามารถควบคุมโฮสต์นั้นได้คุณสามารถตั้งค่า Apache นี้ให้ยอมรับการเชื่อมต่อ SSH และส่งต่อพวกเขา ดูอุโมงค์ SSH ผ่าน HTTP (S)


คุณสามารถใช้ nc แทน corkscrew สำหรับ https ได้หรือไม่ stackoverflow.com/a/15577758/32453
rogerdpack

3

ฉันเพิ่งอ่านคำตอบที่ซับซ้อนที่นี่:

http://benctechnicalblog.blogspot.hu/2011/03/ssh-over-connect-over-port-80.html

คุณสามารถ SSH กลับบ้านบนพอร์ต 80 แม้ว่าเซิร์ฟเวอร์ภายในบ้านของคุณจะเรียกใช้เว็บเซิร์ฟเวอร์บนพอร์ต 80 ด้วย

สมมติว่าเซิร์ฟเวอร์ภายในบ้านเรียกใช้ Apache แนวคิดเกี่ยวข้องกับการเปิดใช้งาน mod_proxy ในเซิร์ฟเวอร์ของคุณจากนั้น จำกัด การเชื่อมต่อกับ localhost (proxy.conf):

<IfModule mod_proxy.c>
         ProxyRequests On
        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
        </Proxy>
        <Proxy localhost>
          Allow from all
        </Proxy>
        AllowCONNECT 22
        ProxyVia On
</IfModule>

ตอนนี้คุณสามารถทำการร้องขอการเชื่อมต่อ HTTP ไปยังโลคัลโฮสต์และเว็บเซิร์ฟเวอร์จะสร้างอุโมงค์ให้คุณคุณเพียงแค่ต้องแน่ใจว่าทราฟฟิกทั้งหมดผ่านพร็อกซีของคุณ:

ssh -o 'ProxyCommand nc -X connect -x myhost.example.com:80 localhost 22' myhost.example.com

ตรวจสอบให้แน่ใจว่าการเชื่อมต่อ localhost กับ SSH ไม่ได้รับสิทธิพิเศษ (เพื่อหลีกเลี่ยงการปล่อยให้คนแปลกหน้าใน ... )

วิธีนี้จะใช้งานได้หากคุณอยู่หลังเราเตอร์ที่อนุญาตให้ใช้พอร์ต 80 เท่านั้น

หากคุณอยู่หลังพร็อกซี (ดังนั้นคุณต้องตั้งค่าพร็อกซีในเบราว์เซอร์ของคุณเพื่อรับเว็บ) คุณจะต้องสร้างช่องสัญญาณไปยังโฮสต์ของคุณก่อนจากนั้นจึงออกคำขอเชื่อมต่อภายในอุโมงค์นี้เพื่อไปยังโฮสต์ของคุณ มันซับซ้อนกว่านี้คุณจะต้องใช้เน็ต 2 ตัวสำหรับสิ่งนี้

ทุกอย่างเป็นไปได้ แต่ทำเพื่อความเสี่ยงของคุณเอง ...

UPDATE:

หรือเพียงแค่ใช้เว็บแอปพลิเคชันที่ให้ SSH ผ่านเบราว์เซอร์ http://en.wikipedia.org/wiki/Web-based_SSH


2

หากคุณไม่สามารถควบคุมเซิร์ฟเวอร์เพื่อเปลี่ยนพอร์ต SSH เป็นพอร์ต 80 หรือหากคุณไม่สามารถ SSH ผ่านพอร์ต 80 ได้เนื่องจากไฟร์วอลล์บล็อกคุณจากการถ่ายโอนข้อมูลดังกล่าวผ่านพอร์ต 80 คุณสามารถลอง TOR

TOR เป็นเครือข่ายขนาดใหญ่ คอมพิวเตอร์ของคุณเชื่อมต่อกับคอมพิวเตอร์เครื่องอื่นในโลกคอมพิวเตอร์เครื่องนั้นเชื่อมต่อกับอีกเครื่องหนึ่งจนกว่าจะถึงเซิร์ฟเวอร์ SSH ทั้งหมดนี้เป็นมิตรกับไฟร์วอลล์เกิดขึ้นที่พอร์ต 443 (ซึ่ง บริษัท ของคุณไม่ได้บล็อกหรืออย่างอื่น .. ก็ไม่ได้ฉลาดเลย) แท้จริงแล้วมันเป็นเพียงแค่พร็อกซีหรือ VPN ขนาดใหญ่และมันก็ถูกเข้ารหัสด้วย ด้วยวิธีนี้คุณสามารถเข้าถึงโฮสต์ใด ๆ บนพอร์ตใดก็ได้ (เช่น SSH ของเซิร์ฟเวอร์ที่พอร์ต 22)

ลองดูที่มันออนไลน์ได้ที่www.torproject.org


2

ฉันขอโทษฉันต้องเล่นเป็นผู้สนับสนุนปีศาจ

ฉันรู้ว่ามีสาเหตุส่วนใหญ่ที่ทำเช่นนี้ แต่ทำไมผู้ดูแลระบบเครือข่าย / ไฟร์วอลล์ของคุณจะไม่เปิดพอร์ตเฉพาะที่คุณกำลังมองหา จากมุมมองด้านความปลอดภัยคุณต้องการใช้โอกาสที่เว็บตรวจสอบจะพลาดอะไรหรือไม่? ถ้ามันถูกกำหนดให้บายพาสพอร์ต 80 สำหรับการรับส่งข้อมูลแบบ std และคุณกำลังตกอยู่ในอันตราย

ฉันเห็นด้วยกับคำแนะนำเล็กน้อยด้านบนซึ่งจุดหนึ่งไปยังอีกจุดหนึ่ง VPN อาจเป็นตัวเลือกที่ปลอดภัยกว่า อีกครั้งจากมุมมองด้านความปลอดภัยฉันจะสนใจที่จะรู้ว่าทำไมคุณถึงผ่านนโยบายความปลอดภัยอย่างแท้จริงและทำไมคุณไม่สามารถทำให้เซิร์ฟเวอร์ของคุณอยู่ในรูปแบบ dmz หรือแกนหลักสำหรับการเข้าถึง แค่ฉัน. โชคดี.


2
ไม่สามารถพูดคุยกับผู้ดูแลระบบเครือข่ายได้ตลอดเวลาและผู้ดูแลระบบเครือข่ายอาจไม่สมเหตุสมผลเสมอไป
Jeremy Bicha

ตัวอย่างเช่นหากคุณกำลังนั่งอยู่ในร้านกาแฟเชื่อมต่อกับ WiFi แต่การเข้าถึงแบบ จำกัด ของผู้ดูแลระบบ (และคุณยังคงต้องเชื่อมต่อทันที)
old-ufo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.