วิธีการ ssh ไปยังเซิร์ฟเวอร์ที่ฉันไม่สามารถเข้าถึงได้โดยตรง?


17

บริบท

ฉันกำลังเรียกใช้ Ubuntu Desktop เป็นเครื่องหลักของฉันซึ่งฉันจะเรียก D. ฉันต้องการเชื่อมต่อกับเซิร์ฟเวอร์ S ผ่าน ssh แต่ไฟร์วอลล์ปิดกั้นฉัน

ฉันมีการเข้าถึงเซิร์ฟเวอร์ S ผ่านเส้นทางที่ยุ่งยากมากที่เกี่ยวข้องกับเครื่องเสมือน Windows และฉาบ สิ่งนี้ทำให้การทำงานกับเซิร์ฟเวอร์นี้น่ารำคาญอย่างยิ่ง: สภาพแวดล้อมที่แตกต่างอย่างสิ้นเชิงการคัดลอก / วางไม่ทำงานฉันไม่สามารถใช้เดสก์ท็อปของฉันในขณะที่เชื่อมต่อกับมันได้อย่างเหมาะสม (Alt-Tab ถูกทำลายโดยเครื่องเสมือน) เป็นต้น

ฉันตรวจสอบแล้วว่าฉันสามารถ ssh จากเซิร์ฟเวอร์ S ไปยังเครื่องเดสก์ท็อปของฉัน D (ตรงกันข้ามกับสิ่งที่ฉันต้องการ)

ฉันสามารถเริ่ม "ส่งต่อพอร์ต" หรือคล้ายกันจากเซิร์ฟเวอร์เพื่อให้ฉันสามารถ ssh ไปยังเซิร์ฟเวอร์จากเดสก์ทอปของฉันได้หรือไม่


2
เจ้าภาพกระโดด ... ต้องรัก 'em !!!
RonJohn

สำเนาซ้ำซ้อนที่เป็นไปได้ของTunnel SSH จาก A-> B-> C
muru

@muru นี้เป็นสถานการณ์ที่แตกต่างกัน แต่แน่นอนว่าเกี่ยวข้องกัน (เกี่ยวกับการขุดอุโมงค์หลังจากทั้งหมด!) ในกรณีนี้ฉันต้องการปลอมD->Sโดยการใช้งานที่ไม่เหมาะสมS->D
dangonfast

คำตอบ:


32

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

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

เมื่ออุโมงค์ถูกตั้งค่าคุณสามารถ ssh ไปยังเซิร์ฟเวอร์ระยะไกลของคุณโดยใช้คำสั่งต่อไปนี้:

$ ssh -p 1234 user@localhost

โปรดทราบว่าคุณต้องตั้งค่าคีย์ ssh สำหรับการเข้าสู่ระบบอัตโนมัติ (ไม่ต้องใส่รหัสผ่าน) หากคุณต้องการสร้างอุโมงค์ SSH แบบโต้ตอบคุณสามารถลบตัวเลือก-f -Nได้ man sshสำหรับข้อมูลเพิ่มเติม


ทันเนลนี้ผ่านทาง Windows VM อย่างไร (ที่ที่ฉันทำงานมีไฟร์วอลล์หลายเลเยอร์และเปิดพอร์ตไม่กี่พอร์ตเท่านั้น)
RonJohn

@ RonJohn ฉันเชื่อว่านี่ใช้ข้อเท็จจริงที่ว่า (สำหรับ OP) ssh-ing จากเซิร์ฟเวอร์ไปยังเดสก์ท็อปดังนั้นการตั้งค่า tunnel จากเซิร์ฟเวอร์ (พอร์ต 22) โดยตรงไปยังเครื่องเดสก์ท็อป (พอร์ต 1234) ที่สามารถใช้ได้ เพื่อเชื่อมต่อกับ ssh บนเซิร์ฟเวอร์ (ซึ่งใช้พอร์ต 22) Windows VM ใช้เพื่อตั้งค่าอุโมงค์เท่านั้น (โปรดแก้ไขฉันหากฉันผิด)
pizzapants184

@dangonfast นอกจากคำตอบแล้วคุณอาจพบเอกสารค่าต่อไปนี้: spencerstirling.com/computergeek/sshtunnel.html
Pryftan

@ RonJohn เอกสารที่ฉันเพิ่งลิงก์อาจช่วยตอบคำถามนั้นได้เช่นกันอย่างน้อยก็หลายชั้นของไฟร์วอลล์ ฯลฯ ไป (ถ้าหน่วยความจำทำหน้าที่ฉันถูกต้อง - เป็นเวลานานมากที่ฉันได้อ่าน .. ฉันแค่ จำได้ว่ามีลิงค์จากปีที่ผ่านมา)
Pryftan

1
@ pizzapants184 จริง ๆ แล้วนั่นคือจุดเริ่มต้นของฉัน: ssh จาก S -> D ดังนั้นฉันต้องการที่จะใช้สิ่งนี้ในทางที่ผิดเพื่อ D -> S ถึงแม้ว่าจะไม่ได้ผล ทำไมเครือข่ายที่กำหนดค่าเช่นนั้นเป็นสิ่งที่ทำให้ฉันรอด อาจเป็นความตั้งใจหรือการกำหนดค่าผิดพลาด แต่ตราบใดที่มันใช้งานได้สำหรับฉัน ...
dangonfast

5

หากคุณใช้ OpenSSH เวอร์ชั่นใหม่กว่า (7.3+) คุณสามารถใช้ProxyJumpสิ่งที่รวมทุกอย่างเข้าด้วยกันอย่างน่าอัศจรรย์:

ssh -J windows_machine remote_server

ซึ่งใน~/.ssh/configลักษณะของคุณ:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpรองรับไวยากรณ์ SSH เต็มรูปแบบดังนั้นหากคุณjimเปิดอยู่windows_serverและจะใช้พอร์ต2222สำหรับ ssh remote_serverเป็นที่ IP 192.168.0.110จากwindows_serverนั้นคุณสามารถเขียน:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

และยังคงวิ่งssh remote_serverไปที่นั่น


หากคุณใช้ SSH เวอร์ชั่นที่เก่ากว่าให้ใช้ProxyCommandซึ่งจะช่วยให้คุณบอก SSH ก่อนให้รันคำสั่งเพื่อสร้างการเชื่อมต่อพร็อกซีก่อนที่จะรันคำสั่ง SSH จริง

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

นี้ใช้ SSH -Wตัวเลือกซึ่งเป็นชวเลขสำหรับความลับมากขึ้นไวยากรณ์ netcat

โปรดทราบว่าเมื่อคุณใช้งานssh remote_serverคุณจะwindows_machineต้องมั่นใจว่าคุณใช้ IP ของremove_server จากกล่องกระโดดแทน IP จากเครื่องของคุณ - สิ่งเหล่านี้อาจเหมือนกัน

จากนั้นคุณสามารถเพิ่มคำสั่งนี้ไปยัง~/.ssh/configไฟล์ของคุณ:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

ซึ่งหมายความว่าถ้าremote_server เป็นเครื่องที่แตกต่างกันเท่าที่เห็นจากนั้นคุณสามารถใส่ว่าในการตั้งค่าและยังคงเป็นเพียงการใช้งานwindows_machinessh remote_server


1
นี่เป็นคำตอบที่ดีกว่ามาก
Robert Riedl

แม้ว่าจะมีประโยชน์ แต่ก็ไม่ตอบคำถามที่ถูกถาม OP ระบุว่าพวกเขาไม่สามารถ SSH จาก D-> S (สิ่งที่พวกเขาต้องการ) แต่พวกเขาสามารถ SSH จาก S-> D ไม่มีพร็อกซี ssh ในระหว่างนั้น (แทนที่จะเป็นเครื่องเสมือนของ Windows ซึ่งอาจเข้าถึงได้โดย RDP)
mbrig

@mbrig แน่นอน ฉันยังไม่ได้ลองวิธีแก้ปัญหานี้ แต่ฉันจะแปลกใจถ้ามันได้ผล: ฉันไฟร์วอลล์จาก D -> S
dangonfast

แต่คุณบอกว่าคุณสามารถไปที่เครื่อง windows - จากที่ฉันเข้าใจว่ามันสามารถทำหน้าที่เป็นกล่องกระโดดระหว่างคุณและเครื่องอื่น ๆ
Boris the Spider

1
ฉันสามารถลงชื่อเข้าใช้เครื่อง windows ด้วยเครื่องมือช่าง (VMWare Horizon) ฉันไม่เคยพูดว่าฉันสามารถทำได้ ฉันได้ทดสอบสิ่งนี้ก่อนที่จะโพสต์คำถามนี้โดยการติดตั้งเซิร์ฟเวอร์ ssh ของ Putty (ฉันลืมชื่อ) แต่การทดสอบของฉันล้มเหลว ฉันคิดว่า ssh ถูกไฟร์วอลล์ไปที่ซับเน็ตของ windows ด้วย
dangonfast

1

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


สนใจอธิบายการลงคะแนนเสียงไหม? คำถามคือ "วิธี ssh ไปยังเซิร์ฟเวอร์ที่ฉันไม่สามารถเข้าถึงได้โดยตรง" ดังนั้นคำตอบของฉันจะมีกฎไฟร์วอลล์เพื่อให้มันถูกต้อง นอกจากนี้ยังเป็นวิธีที่เหมาะสมในการใช้งานตามแนวทางความปลอดภัยที่ดี
Solarflare

ฉันอยู่ในสัปดาห์แรกของสัญญาสามเดือนของลูกค้าองค์กรขนาดใหญ่ ฉันยังไม่ได้รับแล็ปท็อป (ฉันใช้ของฉัน) และแทบจะไม่มีโต๊ะ ฉันมีข้อมูลประจำตัวหลายสิบเพื่อใช้บริการที่แตกต่างกันและฉันแทบจะจัดการเพื่อเล่นปาหี่ไม่ได้เลย สิ่งที่ฉันต้องการทำไม่ใช่เรื่องยากสำหรับการทำงาน: ฉันสามารถทำงานใน VM และนั่นคือสิ่งที่เจ้านายของฉันจะบอกฉันถ้าฉันเริ่มถามคำถามตลก ๆ หรือเขาจะนำฉันไปที่แผนกช่วยเหลือซึ่งจะเตะกระป๋องลงที่ถนนในอีกสองสามสัปดาห์ / เดือน
dangonfast

สำหรับฉันที่ทำงานใน VM จะหมายถึงการสูญเสียผลผลิต 50% ได้อย่างง่ายดายดังนั้นฉันจึงต้องการหลีกเลี่ยงมากที่สุด ยังฉันรักกิ๊กนี้!
dangonfast

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

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