วิธีกำหนดชื่อโฮสต์ให้กับอุโมงค์ SSH


16

ฉันใช้ ssh root@my.server.ip -g -L 4321:localhost:28017 เพื่อสร้างอุโมงค์จาก MacBook ของฉันไปยังเซิร์ฟเวอร์เฉพาะของฉันที่ผู้ให้บริการโฮสต์ของฉัน มันใช้งานได้ดี ตอนนี้ฉันต้องการเข้าถึงไซต์ผู้ดูแลระบบหลายแห่งบนเซิร์ฟเวอร์ระยะไกล (หน้าสถานะ MongoDB หน้า RabbitMQ และอื่น ๆ ทั้งหมดบนพอร์ตที่ต่างกัน) ทั้งหมดถูกผูกไว้กับ 127.0.0.1 บนเครื่องระยะไกล ฉันจะปรับแต่งคำสั่ง ssh นี้ได้อย่างไร

  • กำหนดชื่อให้กับอุโมงค์และใช้เช่น "my.tunnel.name" ในเบราว์เซอร์ของฉัน
  • เพื่อให้สามารถกำหนดพอร์ตระยะไกลในเบราว์เซอร์ของฉัน; ฉันต้องการเชื่อมต่อกับ my.tunnel.name:port เพื่อให้สามารถโทรไปยังไซต์ต่างๆ

เป็นไปได้กับ ssh? ฉันอ่านหน้าคนและ googled รอบสองวันแล้ว แต่ดูเหมือนจะไม่ทำงาน

--edit 2012-06-01 23: 36-- ขอบคุณคำตอบที่ให้ไว้และแสดงความคิดเห็นการส่งต่อพอร์ตทำงานตอนนี้ใช้

ssh user@remote.server -D 4321

ฉันสามารถตั้งค่านี้เป็นพร็อกซีในเบราว์เซอร์ของฉันและเบราว์เซอร์จะปฏิบัติตามคำขอใด ๆ ไปยัง localhost: anyport ราวกับว่ามันถูกสร้างขึ้นบนเซิร์ฟเวอร์ระยะไกล ไม่จำเป็นต้องใช้ชื่อเนื่องจากเบราว์เซอร์มีไว้สำหรับไซต์เซิร์ฟเวอร์ระยะไกลเท่านั้น

คำตอบ:


12

สิ่งที่คุณอธิบายเป็นไปไม่ได้ แต่ยังมีข่าวดี:

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

คำสั่งมีลักษณะดังนี้: ssh user@server.example.com -D 1234
จากนั้นให้ชี้ไปที่พร็อกซีเบราว์เซอร์ของlocalhost:1234คุณ

ดังนั้นหากคุณเข้าสู่เซิร์ฟเวอร์ A และต้องการเชื่อมต่อกับเซิร์ฟเวอร์ B คุณต้องพิมพ์ลงในเบราว์เซอร์ของคุณไม่ว่าที่อยู่ใดที่คุณจะพิมพ์ลงในเบราว์เซอร์ที่ทำงานบนเซิร์ฟเวอร์ A หากเบราว์เซอร์ที่ทำงานบนเซิร์ฟเวอร์ A ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ B ได้ ดำเนินการบนเซิร์ฟเวอร์ B เท่านั้นฟังที่ 127.0.0.1) จากนั้นคุณยังไม่สามารถเชื่อมต่อได้ ดูเหมือนว่าคุณมีเซิร์ฟเวอร์เพียงเครื่องเดียว แต่ฉันต้องการแน่ใจว่านี่ชัดเจน

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

Securit หมายเหตุด้านข้าง: ไม่เคยไม่เคยติดตั้งเซิร์ฟเวอร์ที่รูทสามารถ SSH ได้! ข้อบกพร่องด้านความปลอดภัยที่ร้ายแรง สร้างบัญชีผู้ใช้ปกติ (ผู้ที่อนุญาตให้ su หรือ sudo) และ SSH ในฐานะผู้ใช้นั้น


2
คุณกำลังใช้ -L 1234 (โลคัลพอร์ตไปข้างหน้า) เมื่อคุณควรใช้ -D 1234 (พอร์ตแบบไดนามิกไปข้างหน้า) และอาจหลีกเลี่ยงการใช้ -g, -g หมายความว่าโฮสต์ระยะไกลสามารถเชื่อมต่อไปข้างหน้าซึ่งไม่ใช่สิ่งที่คุณต้องการหากคุณทำสิ่งนี้จากเวิร์กสเตชันของคุณ
Mattias Ahnberg

ขอบคุณคริส ฉันได้ลองแล้ว ฉันไม่สามารถใช้คำสั่ง ssh ด้วยเพียงพอร์ตที่ระบุ มันส่งคืนข้อผิดพลาด: "ข้อกำหนดการส่งต่อเฉพาะที่ไม่ดี '1234'"
brains_at_work

@ matthias-ahnberg: เยี่ยมมากนั่นเป็นกลอุบาย ด้วยการส่งต่อแบบไดนามิกตอนนี้ฉันสามารถใช้พอร์ตเป็นพร็อกซีและโลคอลโฮสต์: การโทรบางพอร์ตจะถูกนำไปยังเซิร์ฟเวอร์ระยะไกล
brains_at_work

@MattiasAhnberg ว้าวเป็นความคิดที่ฉลาด ขอบคุณสำหรับการแก้ไข
Chris S

ฉันทำตามกระบวนการนี้ แต่ได้รับข้อผิดพลาด "การเชื่อมต่อถูกรีเซ็ต" ใน firefox
rivu

23

คุณสามารถกำหนดชื่อโดยใช้อะแดปเตอร์ย้อนกลับของคุณโดยทั่วไปจะตอบสนองต่อที่อยู่ใด ๆ ในเครือข่าย 127.0.0.0/8

ดังนั้นแทนที่จะผูกกับพอร์ต 4321 คุณสามารถผูกกับ 127.1.2.3:4321 แล้วก็ตั้งค่ารายการโฮสต์ที่แผนที่ชื่อเพื่อที่อยู่ย้อนกลับที่คุณใช้เพื่อ foo.bar 127.1.2.3แมปไป

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

ดังนั้นหากคุณเชื่อมต่อแบบนี้

ssh root@my.server.ip -g -L 127.1.2.3:4321:localhost:28017

และไฟล์โฮสต์ของคุณมีบรรทัดเช่นนี้

127.1.2.3 my.tunnel.name

จากนั้นคุณควรจะสามารถเชื่อมต่อกับ my.tunnel.name:4321 จากเครื่องท้องถิ่นของคุณ

หากคุณมีพื้นที่ที่อยู่ IP เพิ่มเติมในเครือข่ายไคลเอ็นต์ ssh ของคุณเชื่อมต่อกับคุณสามารถกำหนดที่อยู่สำรองให้กับอินเตอร์เฟส Ethernet ของคุณและใช้หนึ่งใน IP จริงของคุณจากนั้นตั้งค่ารายการใน DNS ของคุณหากคุณต้องการให้ระบบอื่น ๆ เพื่อใช้อุโมงค์ SSH ของคุณ

ตัวเลือก -L -L [bind_address:]port:host:hostportจะช่วยให้คุณใช้ที่อยู่ IP ใด ๆ ที่ถูกต้องบนระบบโลคัลเพื่อเชื่อมโยง คุณจำเป็นต้องมี-gตัวเลือกเช่นกันหากคุณต้องการให้โฮสต์อื่นสามารถเชื่อมต่อผ่านอุโมงค์ ssh ของคุณได้


ฉันต้องเพิ่มไอพีของลูปแบ็คใน osx ifconfig l0 alias 127.0.1.1 255.255.255.0เคล็ดลับที่ดีอย่างอื่น!
devians

1
หากคุณไม่ต้องการให้เชลล์สร้างให้รัน-Nที่ส่วนท้ายของคำสั่ง วิธีนี้ง่ายต่อการจดจำว่าเป็นอุโมงค์ไม่ใช่แค่การเชื่อมต่อ SSH
mlissner

เมื่อใช้127.1.2.3ผมต้องทำเช่นนี้บน MacBook ของฉัน: ifconfig lo0 alias 127.1.2.3 255.255.255.0ซึ่งจะเพิ่มความเป็นอยู่ใหม่บนอินเตอร์เฟซ127.1.2.3 lo0
Donn Lee

5

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

ssh user@host.domain.com -D 127.0.0.1:31337

จากนั้นกำหนดค่าแอปพลิเคชันของคุณเพื่อใช้สิ่งนี้เป็นพร็อกซี SOCKSv5

หากคุณต้องการชื่อโฮสต์ที่เชื่อมโยงกับสิ่งนี้เพียงแค่เพิ่ม/etc/hostsรายการที่ชี้ไปที่ 127.0.0.1 แต่วิธีที่น่าสนใจกว่าคือการเพิ่ม 127.0.0.2 สำหรับช่องสัญญาณแรกและรายการโฮสต์สำหรับรายการนี้ 127.0.0.3 สำหรับวินาที ช่องสัญญาณและรายการโฮสต์แยกต่างหากสำหรับรายการนี้ ฯลฯ หากคุณเพิ่มชื่อแทนสำหรับ 127.0.0.1 บางครั้งนามแฝงนี้จะปรากฏในคำสั่งอื่น ๆ การค้นหา localhost ซึ่งอาจทำให้เกิดความสับสน!

ได้อย่างราบรื่นใช้นี้ในเว็บเบราเซอร์คุณสามารถใช้ addon พร็อกซี่เป็นตัวอย่างที่ผมชอบเว็บเบราเซอร์ Chrome และสำหรับการนี้ผมใช้ addon Proxy Switchy!ที่เรียกว่า คุณสามารถดาวน์โหลดได้ที่นี่:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

ในการกำหนดค่าของ addon นี้ฉันสามารถกำหนดพร็อกซีที่แยกจากกันหลายรายการและจากนั้นผูกนิพจน์ปกติของโฮสต์ / URL ที่จะใช้พร็อกซีบางอย่างด้วยวิธีนี้ฉันจะถูกเปลี่ยนเส้นทางอย่างถูกต้องผ่านอุโมงค์ขวาโดยไม่ต้องสลับด้วยตนเอง โปรดแจ้งให้เราทราบหากคุณต้องการคำชี้แจงเพิ่มเติมเกี่ยวกับขั้นตอนใด ๆ !


ขอบคุณสำหรับเคล็ดลับ Add-on ตั้งแต่ฉันใช้ Chrome ฉันก็ไม่ต้องเปิด FireFox เหมือนกัน
brains_at_work
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.