http proxy over ssh ไม่ใช่ถุงเท้า


30

คำถามนั้นง่าย แต่คำตอบนั้นไม่ใช่:

ssh -D 8080 user@host

หรือ

ssh -gCNf -D 8080 user@host

หรือ

wathever with -D #

ฉันต้องการพร็อกซีชนิดที่ฉันสามารถใช้กับตัวแปร http_proxy ในอุปกรณ์ฝังตัวที่ไม่รองรับ SOCKS

ฉันควรทำอย่างไร?


มันไม่ควรจะเป็นssh -D user@host:8080?
ngen

ฉันทำมันด้วย ssh สักครู่ .. vnc ผ่าน ssh แต่ฉันสามารถใช้สมมุติ squid (http proxy) ผ่าน ssh ไม่สามารถจำได้ว่าฉันทำมันแม้ว่าในขณะนี้ มันไม่ใช่ -D 'cos (อย่างที่คุณรู้ - และดีกว่าฉัน) - D คือถุงเท้าถ้าฉันจำได้
barlop

@ngen: ไม่-Dระบุพอร์ตเพื่อเปิดช่องสัญญาณไม่ใช่พอร์ตที่จะเชื่อมต่อ (แม้พอร์ตการเชื่อมต่อจะถูกระบุว่า-p portไม่ใช่:portเพื่อเหตุผลด้านความเข้ากันได้)
grawity

คำตอบ:


33

วิธีที่ 1:ใช้พร็อกซี HTTP ที่รองรับการใช้ SOCKS upstream เช่น Polipo หรือ Privoxy

ขั้นแรกให้สร้างช่องสัญญาณ-Dผ่าน SSH เช่นเคยจากนั้นกำหนดค่าพร็อกซี HTTP เพื่อใช้ช่องสัญญาณ SSH - ตัวอย่างการกำหนดค่า Polipo:

proxyAddress = "::1"
proxyPort = 8118
socksParentProxy = "localhost:8080"
socksProxyType = socks5

สุดท้ายชี้ให้แอป Polipo http_proxy=localhost:8118ใช้

วิธีที่ 2:เรียกใช้โปรแกรมของคุณภายในtorsockswrapper (หรือเก่ากว่าtsocks) ซึ่ง proxies การเชื่อมต่อทั้งหมดอย่างโปร่งใส มันมีความหมายสำหรับการใช้งานกับทอร์ แต่ทำงานร่วมกับเซิร์ฟเวอร์ใด ๆ ssh -Dถุงเท้ารวมทั้ง

วิธีที่ 3:ตั้งค่าพร็อกซี HTTP บนเซิร์ฟเวอร์ของคุณจากนั้นใช้ssh -Lเพื่อเข้าถึง


Privoxy เป็นทางออกที่ดีที่สุด ขอบคุณมาก.
Seyed Morteza

18

ทุก-Dผลลัพธ์ลงในเซิร์ฟเวอร์ SOCKS หากลูกค้าของคุณไม่สามารถจัดการ SOCKS ลืม-Dได้

คุณต้องรัน HTTP-Proxy บนรีโมตโฮสต์และส่งต่อด้วย-L:

ssh -f -N -n -L8080:127.0.0.1:8080 host

2
เพื่อให้พร็อกซีเรียกใช้ฉันพบว่า "tinyproxy" super simple และกำหนดค่าไว้อย่างสมเหตุสมผลแล้วตามค่าเริ่มต้น บน Ubuntu / etc remote host เพียงแค่ "sudo apt-get install tinyproxy" จากนั้นส่งต่อไปยังพอร์ต 8888 ดังกล่าว: "ssh -L8888: 127.0.0.1: 8888"
Jimbly

7

ฉันมีปัญหาเดียวกันกับที่ต้องการใช้พร็อกซี HTTP ผ่าน SSH เนื่องจากแอปพลิเคชันจำนวนมากรองรับพร็อกซี HTTP เท่านั้นและพร็อกซี HTTP นั้นใช้งานง่ายในสภาพแวดล้อมบรรทัดคำสั่ง

แม้ว่าจะค้นหาหลายหน้า แต่ฉันไม่สามารถหาวิธีโดยตรง (สามารถถูกผูกมัดกับ Polipo, Privoxy หรือ tsocks) วิธีการทำเช่นนี้ ...

หลังจากทำงานเป็นเวลาหนึ่งวันฉันก็เสร็จ HTTP proxy Golang เวอร์ชั่นธรรมดาผ่าน SSH รู้สึกอิสระที่จะเล่นกับมัน: มัลลอรี่

ปัจจุบันรองรับคีย์ RSA เท่านั้น (อยู่ที่ $ HOME / .ssh / id_rsa) และการอนุมัติรหัสผ่าน

hostเป็นที่อยู่เซิร์ฟเวอร์ SSH หรือportไม่22หากไม่ใช่โดยผู้ดูแลระบบของคุณ ฝั่งเซิร์ฟเวอร์เป็นเพียงเพื่อนเก่าของเราที่sshdมีการกำหนดค่าเป็นศูนย์

mallory -engine=ssh -remote=ssh://host:port

หรือด้วยชื่อผู้ใช้ user

mallory -engine=ssh -remote=ssh://user@host:port

หรือด้วยชื่อผู้ใช้userและรหัสผ่าน1234

mallory -engine=ssh -remote=ssh://user:1234@host:port

หลังจากเชื่อมต่อแล้วพร็อกซี HTTP จะให้บริการบน localhost: 1315


4
ssh -L 8080:localhost:12345 user@host

สิ่งนี้จะเปิดพอร์ต 8080 บนเครื่องโลคัลและส่งต่อข้อมูลทั้งหมดไปยังพอร์ต 12345 บนโลคัลโฮสต์ตามที่เห็นจากเครื่องรีโมต


2
อย่าลืมคุณต้องมีพร็อกซี HTTP ที่ทำงานบนโฮสต์ระยะไกล การส่งต่อพอร์ตด้วยตัวเองจะไม่ช่วย
Jonathan

2

เรียกใช้ Privoxy ที่รีโมตโฮสต์จากนั้นเชื่อมต่อผ่าน SSH ไปยัง Privoxy โดยใช้-Lตัวเลือก:

-L [bind_address:] พอร์ต: host: hostport
         ระบุว่าพอร์ตที่กำหนดบนโฮสต์ (ไคลเอนต์) จะต้องเป็น
         ส่งต่อไปยังโฮสต์และพอร์ตที่กำหนดบนด้านรีโมต นี้
         ทำงานโดยการจัดสรรซ็อกเก็ตเพื่อฟังพอร์ตในด้านโลคัล
         ผูกพันเป็นทางเลือกกับ bind_address ที่ระบุ เมื่อใดก็ตามที่
         nection ทำกับพอร์ตนี้การเชื่อมต่อจะถูกส่งต่อ
         ช่องทางที่ปลอดภัยและทำการเชื่อมต่อกับโฮสต์พอร์ต
         hostport จากเครื่องระยะไกล

(ที่มา manpage )


1

คุณสามารถใช้เหล็กไขจุก (GPL)

เพิ่มสิ่งต่อไปนี้ใน .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p

corkscrew รัน ssh บนพร็อกซี http ไม่ใช่การย้อนกลับที่ถูกถาม
eMBee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.