สมมติว่าคุณอยู่ที่ Computer A และคุณเชื่อมต่อกับคอมพิวเตอร์ B ดังนั้น A จึงเริ่มการเชื่อมต่อกับ B .. บอกเลยว่าเป็นเว็บดังนั้นการเชื่อมต่อ HTTP ไม่มีพร็อกซีที่นั่นและไม่มีการเข้ารหัส ไม่มี SSH ไม่มีคำสั่ง SSH ที่ใช้ คุณสามารถเรียกใช้การเชื่อมต่อนั้นผ่าน SSH ที่เกี่ยวข้องกับการสร้างช่องสัญญาณและการส่งต่อพอร์ตและแน่นอนว่าจะได้รับประโยชน์จากการเข้ารหัสเช่นกัน แต่การสร้างช่องทางที่ใช้การส่งต่อพอร์ตโดยวิธีการเสมอ
คุณสามารถมี SSH ได้โดยไม่ต้อง "อุโมงค์" ดังนั้นโดยไม่ต้องห่อหุ้มโปรโตคอลภายในเช่น สมมติว่าคุณใช้คอมพิวเตอร์ A และคุณต้องการเข้าถึงบรรทัดคำสั่งบนคอมพิวเตอร์ B. โปรโตคอล SSH สามารถทำได้ และในความเป็นจริงฉันได้เห็น ssh -X ให้เปิดใช้งานเพื่อดู GUI บน Computer B ที่คอมพิวเตอร์ B รัน Linux ดังนั้น SSH สามารถทำอะไรได้บ้างโดยไม่ต้องขุดอุโมงค์ และคุณจะได้รับการเข้ารหัสของ SSH ทุกครั้งที่ใช้ SSH
สิ่งที่คุณสามารถทำได้คือสมมุติว่าคุณต้องการท่องเว็บจากร้านอินเทอร์เน็ต คุณสามารถทำการเชื่อมต่อ SSH จากคอมพิวเตอร์ A ไปยังคอมพิวเตอร์ B ทำให้การเชื่อมต่อที่เป็นอุโมงค์ SSH นั้นจะเป็นแค็ปซูลโปรโตคอลอื่นเช่น ร้องขอไปยังพร็อกซี HTTP .. และที่คอมพิวเตอร์ B เว็บพร็อกซีจะทำหน้าที่ดึงข้อมูลเว็บเพจและส่งไปยังคอมพิวเตอร์ A. ทุกคนที่ร้านอินเทอร์เน็ตเห็นคือการเชื่อมต่อ ssh ที่เข้ารหัสระหว่าง A และ B การส่งต่อพอร์ตแบบไดนามิก จะสร้างพร็อกซี SOCKS ที่ B และพร็อกซี SOCKS สามารถทำหน้าที่เป็นเว็บพร็อกซี
คุณสามารถใช้ VNC จาก A ถึง B แต่ทำได้ผ่านการเชื่อมต่อ SSH .. นั่นคือการสร้างอุโมงค์ / encapsulating การเชื่อมต่อ VNC ผ่านการเชื่อมต่อ SSH
มีแนวคิดใน SSH ของการส่งต่อพอร์ตท้องถิ่นและการส่งต่อพอร์ตระยะไกล (อุโมงค์ย้อนกลับ) นั่นคือสิ่งที่ฟังและด้านข้างไปข้างหน้า ท้องถิ่นเป็นเรื่องปกติ ตัวอย่างเช่น. สถานการณ์ของ ssh tunneling เกี่ยวข้องกับองค์ประกอบเหล่านี้ .. ssh.exe (เริ่มการเชื่อมต่อ ssh นั่นคือไคลเอ็นต์ ssh) sshd.exe (เซิร์ฟเวอร์ ssh ฟัง ssh.exe เพื่อเชื่อมต่อ) และไคลเอนต์และเซิร์ฟเวอร์ของโปรโตคอลห่อหุ้ม เช่น. ไคลเอ็นต์ VNC และเซิร์ฟเวอร์ VNC และคุณมีคอมพิวเตอร์ที่ใช้งานแต่ละเครื่อง
สมมติว่าคอมพิวเตอร์ของคุณคือ A, B, C, D
A-run VNC client
B เรียกใช้ไคลเอ็นต์ SSH
C รันเซิร์ฟเวอร์ SSH
D รันเซิร์ฟเวอร์ VNC
B เชื่อมต่อกับ C
A เชื่อมต่อกับ B จากนั้น C ส่งต่อไปยัง D
ทุกอย่างระหว่าง B และ C ถูกเข้ารหัส
สิ่งใดระหว่าง A และ B หรือ C และ D จะไม่ถูกเข้ารหัส
อุโมงค์ SSH อยู่ระหว่าง B และ C
ระหว่าง A และ B และระหว่าง C และ D เป็นโปรโตคอลห่อหุ้ม - VNC ในกรณีนี้
ตอนนี้ฉันจะไปที่อุโมงค์ย้อนกลับและมันมีประโยชน์ ..
สมมติว่า A อยู่หลัง NAT Router และ B อยู่หลัง NAT Router .. หาก A ต้องการเชื่อมต่อกับ VNC บน B B จะต้องทำการส่งต่อพอร์ตบนเราเตอร์ของเขา (แม้จะไม่มี SSH)
อีกวิธีหนึ่งคือถ้าหาก B สามารถเริ่มต้นการเชื่อมต่อกับ A การเปิดใช้งาน A เพื่อดู B ดังนั้นคุณนักเทคนิคจึงส่ง joe bloggs ที่ปฏิบัติการได้จากนั้นเรียกใช้แล้วคุณจะเห็นคอมพิวเตอร์ PChelpWare ทำสิ่งนี้ช่วยให้คุณสร้างไฟล์ที่เรียกใช้งานได้ แต่กระบวนการของ B สามารถเชื่อมต่อกับคุณสามารถทำได้ด้วย SSH
ตัวอย่างเช่นในสถานการณ์ของอุโมงค์ ssh คุณอาจมี
CompA ทำงานไคลเอนต์ VNC และไคลเอนต์ SSH
CompB เรียกใช้เซิร์ฟเวอร์ VNC และเซิร์ฟเวอร์ SSH
ดังนั้นการเชื่อมต่อช่องสัญญาณและ VNC จึงไปในทิศทางเดียวกัน
A เชื่อมต่อไคลเอ็นต์ SSH ของเขา (ssh.exe) กับเซิร์ฟเวอร์ SSH ของ B (sshd.exe) (ต้องใช้ B เพื่อทำการส่งต่อพอร์ตบนเราเตอร์ของเขา) ssh.exe บน A จากนั้นสร้างพอร์ตบน A - comp ที่กำลังรันอยู่ซึ่งฟังการเชื่อมต่อ VNC นั่นคือด้านการฟังของอุโมงค์ และเมื่ออุโมงค์ถูกสร้างขึ้นมันถูกกำหนดว่า B ควรส่งต่อไปยังสิ่งที่ IP: PORT, B ในกรณีนี้ ซึ่งเป็นที่ที่เซิร์ฟเวอร์ VNC อยู่
CompA / PersonA เชื่อมต่อไคลเอนต์ VNC กับพอร์ตที่ ssh.exe ได้เปิดบน A และจากนั้นจะถูกส่งต่อไปยัง B
แต่นี่คือปัญหาของสิ่งนั้นกับอุโมงค์ ssh ในพื้นที่ สมมติว่า B ไม่รู้ว่าจะส่งต่อพอร์ตบนเราเตอร์ของเขาอย่างไร
จากนั้น A ไม่สามารถเชื่อมต่อ SSH.EXE ของเขาลูกค้า ssh ของเขาไปยัง SSHD.EXE ของ B, เซิร์ฟเวอร์ ssh ของ B
พวกเขาสามารถทำอุโมงค์ SSH ย้อนกลับได้
A เรียกใช้ SSH SERVER และ VNC Client
B รัน SSH ไคลเอนต์และเซิร์ฟเวอร์ VNC ..
B เชื่อมต่อกับ A .. ด้วยคำสั่งที่แนะนำว่าจะสร้างอุโมงค์ย้อนกลับ ดังนั้นการฟังจึงไม่ได้อยู่ในพื้นที่ที่ SSH.EXE รัน (ซึ่งคือ B) แต่พอร์ตการฟังถูกเปิดบน A แม้ว่า B จะรัน ssh.exe ดังนั้น B จะเชื่อมต่อกับ A และทำการเชื่อมต่อ SSH ตอนนี้ฟังสำหรับโปรโตคอลที่ถูกห่อหุ้ม
A เชื่อมต่อไคลเอนต์ VNC ของเขากับพอร์ตที่เปิดบน A และมุมมอง B
B ไม่จำเป็นต้องทำการส่งต่อพอร์ตบนเราเตอร์ของเขา สิ่งที่ต้องทำก็คือเริ่มต้นการเชื่อมต่อ .. ไม่มีการเชื่อมต่อเข้ากับ B. นั่นคือสิ่งที่อุโมงค์ SSH สามารถทำได้
(โปรดทราบว่าทุกวันนี้เมื่อ A ต้องการดู B พวกเขามักจะใช้โซลูชันเช่น teamviewer ซึ่งอาจเกี่ยวข้องกับการเชื่อมต่อขาออก)
แต่อย่างใดนั่นคือการใช้อุโมงค์ย้อนกลับ ssh
ดังนั้นไม่ว่าจะใช้โลคัล ssh หรือย้อนกลับขึ้นอยู่กับว่าด้านใดกำลังบล็อกขาเข้า หรือด้านใดด้านหลังอุปกรณ์บล็อกสิ่งที่เข้ามาซึ่งคุณไม่สามารถควบคุมได้ เช่น. NAT เราเตอร์หรือไฟร์วอลล์ที่คุณไม่สามารถควบคุมได้
Dynamic tunnel คือตำแหน่งที่ A เชื่อมต่อกับ B ผ่าน SSH และสร้างพร็อกซี SOCKS ที่ B. พร็อกซี SOCKS เปรียบเสมือนพร็อกซีทั่วไป .. ซึ่งสามารถเลียนแบบพร็อกซีประเภทต่าง ๆ ได้ ดังนั้นจึงสามารถทำหน้าที่เป็นเว็บพรอกซี ดังนั้นถ้าคุณอยู่ที่ร้านอินเทอร์เน็ต .. คุณสามารถใช้อุโมงค์แบบไดนามิก เชื่อมต่อกับ CompB และนั่นคือทุกคนที่เปิดร้านอินเทอร์เน็ต สิ่งที่มีพร็อกซีของเว็บคือมันไม่ได้ส่งต่อไปยังคอมพิวเตอร์เครื่องเดียวไม่เช่นนั้นคุณจะได้เพียงเว็บไซต์เดียวเท่านั้น มันจะส่งต่อไปยังเว็บเซิร์ฟเวอร์ใด ๆ ก็ตามที่คุณร้องขอทำให้คุณสามารถท่องเว็บได้
เมื่อต้องการทำ SSH ด้วยการส่งต่อพอร์ตโลคัลดังนั้นช่องสัญญาณ ssh โลคัลคุณทำ SSH -L PORT:IP:PORT user@sshserver -p 22
โดยที่ PORT: IP: PORT "พอร์ต" ตัวแรกคือพอร์ตที่ ssh.exe จะสร้างขึ้นภายในเครื่องสำหรับคุณ ไคลเอนต์ VNC เพื่อเชื่อมต่อ และ IP: PORT คือ IP: PORT ของเช่น เซิร์ฟเวอร์ VNC จากนั้นคุณมี sshserver -p 22 sshserver เป็น IP ของเซิร์ฟเวอร์ ssh ที่คุณกำลังเชื่อมต่อและ -p 22 หมายถึงเชื่อมต่อกับพอร์ตที่ 22 คุณอาจจริงแทน PORT: IP: PORT, พูด IP: PORT: IP PORT ที่ IP แรกคือ 0.0.0.0 หรือ * ซึ่งหมายความว่าคอมพิวเตอร์ทุกเครื่องสามารถเชื่อมต่อได้
SSH แต่มีช่องสัญญาณย้อนกลับ ssh ทำการส่งต่อพอร์ตแบบโลคัล ดังนั้นคุณทำ SSH -R PORT: IP: PORT โดยที่ PORT แรกคือพอร์ตที่ส่วนท้าย sshd.exe ที่รับฟัง และ IP: PORT คือ IP: PORT ของเช่น เซิร์ฟเวอร์ VNC แต่ CompA นั่นคือคอมพ์ที่กำลังรัน ssh.exe จะส่งต่อไป และก็ยัง SSH -R PORT:IP:PORT user@sshserver -p 22
SSH แบบไดนามิกน่าจะเป็นของแบบฟอร์ม ssh -D 8080 <username>@192.168.1.1
มีบางกรณีที่มีคนทำเวอร์ชันย้อนกลับ .. เป็น reverse SSH -D https://stackoverflow.com/questions/842021/ssh-d-port-usernameserver-com-but-in-reverse เขาวิ่งเซิร์ฟเวอร์ SSH และต้องการให้เพื่อนของเขาสามารถเข้าถึงพร็อกซี SSH ของเขาได้ ดังนั้นเพื่อนของเขาจะรัน ssh -D username@server.com แต่เขาไม่ต้องการให้เพื่อนของเขามีคอนโซล SSH ด้วย ไม่มีข้อสงสัยวิธีที่ดีกว่าในการป้องกันสิ่งนั้น แต่สิ่งที่เขาทำ .. หรือขอให้ทำ .. เขาเชื่อมต่อ SSH กับเพื่อนของเขาหรือไม่ แต่จากนั้นให้เพื่อนของเขาเข้าถึงพร็อกซี SSH ของเขา ดังนั้นเพื่อนของเขาจึงมีพร็อกซีเพื่อเข้าถึงพร็อกซี SOCKS ของเขา! ดังนั้นเขา (บุคคลที่ A- ตั้งค่าคอมพิวเตอร์ของเขาเพื่อให้เพื่อนของเขาสามารถเข้าถึงพร็อกซี (A)) ของเขาจะพิมพ์ ssh -R 24680:localhost:12345 remotehost
จากนั้นทำ ssh -D 12345 localhost
ssh -R นั่นหมายถึงพอร์ตแรกที่ระบุ (24680) จะเปิดขึ้นบน CompB และสิ่งที่ได้รับจากสิ่งนั้น (ซึ่งเป็นที่ที่ B เชื่อมต่อเว็บเบราว์เซอร์ของเขา) จะถูกส่งไปยัง A และส่งต่อไปยังพอร์ต 12345 ซึ่งเป็นที่ที่ A ใช้งานพร็อกซีถุงเท้าของเขา และสิ่งที่ตลกเกี่ยวกับวิธีการตั้งค่าพร็อกซี SOCKS ซึ่งเป็นวิธีการตั้งค่าพร็อกซี SOCKS ของพร็อกซีด้วย SSH มันต้องใช้การเชื่อมต่อ ssh ของตัวเองหรือไม่ นั่นไม่ใช่การสร้างช่องสัญญาณ SSH ผ่าน SSH คำขอของ SOCKS นั้นถูกส่งผ่าน SSH แต่การเชื่อมต่อ ssh ที่ทำให้พร็อกซี SOCKS เป็นการเชื่อมต่อที่แยกต่างหากที่มาจากการเชื่อมต่อไปยังเซิร์ฟเวอร์ ssh ของตัวเองที่พอร์ต 22 (นอกเหนือจากการเชื่อมต่อ SSH A กำลังทำกับ B) ตัวอย่างสุดท้าย, reverse ssh -D เป็นการใช้ SSH ที่ซับซ้อนมาก! การใช้งานอื่น ๆ (local, reverse และ normal -D) ยังคงซับซ้อน แต่ไม่ซับซ้อนเท่ากับ reverse -D ตัวอย่าง ฉันเพิ่งเพิ่มมันเพื่อความสมบูรณ์มากขึ้น