SSH Tunneling ในระยะของคนธรรมดา


1

SSH tunneling คืออะไร? อะไรคือข้อแตกต่างระหว่างคำว่า: SSH Tunneling และ Port forwarding? ความแตกต่างที่แน่นอนระหว่างวิธีการทันเนล SSH ประเภทต่างๆคืออะไร?

การส่งต่อพอร์ตโลคัล vs การส่งต่อพอร์ตย้อนกลับ vs การทันเนลแบบไดนามิก

สถานการณ์ในอุดมคติใดที่สามารถใช้แต่ละประเภทได้


1
คำตอบที่ยอมรับได้และคำตอบของคนธรรมดาเป็นสิ่งที่แตกต่างกันมาก ...
Jason

ขออภัย! ทั้งหมดที่ฉันต้องการคือคำอธิบายโดยละเอียด ฉันจะเปลี่ยนมันได้ไหม?
Rahil Arora

คุณสนใจวิธีการทั่วไปอื่น ๆ ในการเชื่อมต่อกับ LAN ระยะไกลอย่างปลอดภัยเช่น VPN หรือ RDS หรือไม่
Jason

ไม่จริง ฉันพยายามที่จะเข้าใจวิธีการเหล่านี้และมีเวลายากที่จะเข้าใจความแตกต่างของวิธีการเหล่านี้
Rahil Arora

@ Jason nah คุณสามารถมีคำตอบของบัญญัติทั่วไป SSH เป็นสิ่งที่ซับซ้อน .. ดังนั้นเมื่อเขาขอคำตอบจากคนธรรมดาเขา (และในกรณีนี้เป็นที่ชัดเจน) เขาไม่ได้ขอคำอธิบายจากเพื่อนบ้านหรือคุณปู่ของเขาเขาเป็นนักวิชาการและขอคำอธิบายว่า ครอบคลุมพื้นที่ของท้องถิ่นย้อนกลับแบบไดนามิก)
barlop

คำตอบ:


5

ในแง่คนธรรมดา Secure Shell หรือ SSH ถูกสร้างขึ้นระหว่างโปรแกรมคอมพิวเตอร์สองโปรแกรม:

  1. ทางฝั่งเซิร์ฟเวอร์: daemon (บริการระบบ) ที่ฟังพอร์ต TCP / IP และ ยอมรับการเชื่อมต่อ มันได้รับแพคเกจที่เข้ารหัสหลายประเภทซึ่งมันทำงาน
  2. บนฝั่งไคลเอ็นต์: ไคลเอ็นต์ที่เชื่อมต่อกับเซิร์ฟเวอร์และถ่ายโอนคำสั่ง

การเชื่อมต่อระหว่างไคลเอนต์และเซิร์ฟเวอร์ใช้การเข้ารหัสดังนั้นการสร้างจึงมีผล ช่องทางที่ปลอดภัยผ่านเครือข่ายที่ไม่ปลอดภัย คำว่า "Secure Shell" มาจากความสามารถของเซิร์ฟเวอร์ในการใช้งานเชลล์ท้องถิ่น บนคอมพิวเตอร์เซิร์ฟเวอร์อนุญาตให้ไคลเอ็นต์เรียกใช้งานคำสั่งและดูผลลัพธ์ แต่ SSH ยังสามารถใช้เพื่อวัตถุประสงค์อื่น ๆ อีกมากมาย

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

image

ข้อความจากโพรโทคอลด้านในจะถูกเข้ารหัสและห่อหุ้มด้วยวิธีนี้ ภายในโปรโตคอล SSH

ด้านล่างนี้มีรายละเอียดบางส่วน แต่ไม่ได้ใช้ทั้งหมดของการใช้งาน SSH

การดำเนินการคำสั่งระยะไกล

ในการรันคำสั่งบนระบบรีโมตโดยไม่ต้องล็อกอินให้ระบุคำสั่งหลังจากข้อมูลล็อกอิน:

$ ssh host command

ตัวอย่างเช่นเพื่อตรวจสอบพื้นที่ดิสก์ระยะไกล:

$ ssh host df

อีกตัวอย่างสำหรับ Linux คือการวางไมโครโฟนจากเครื่องหนึ่งไปยังลำโพงของเครื่องอื่น:

$ dd if=/dev/dsp | ssh -C user@host dd of=/dev/dsp

คัดลอกไฟล์ด้วย ssh

สำหรับการคัดลอกข้อมูลและไฟล์ผ่าน SSH มีตัวเลือกน้อย

เป็นไปได้ที่จะคัดลอกด้วย cat คำสั่ง หากคุณพยายามคัดลอกผลลัพธ์ของกระบวนการแทนที่จะเป็นไฟล์นี่เป็นเส้นทางที่สมเหตุสมผล:

$ cat file | ssh -e none remote-host 'cat > file'

หากสิ่งเหล่านี้จะเป็นไฟล์ขนาดใหญ่คุณอาจต้องการใช้แฟล็ก -C เพื่อเปิดใช้งานการบีบอัด

สำหรับการคัดลอกไฟล์ scp ของโปรแกรมทำงานเช่น cp ยกเว้นว่าจะยอมรับปลายทางระยะไกลด้วย:

$ scp .bash_profile matt@example.com:~/.bash_profile

สำหรับอินเทอร์เฟซที่คล้ายกับ FTP สำหรับการคัดลอกไฟล์ใช้โปรแกรม sftp

การส่งต่อพอร์ตท้องถิ่น

SSH อนุญาตให้ส่งต่อพอร์ตที่ปลอดภัย

ตัวอย่างเช่นสมมติว่าคุณต้องการเชื่อมต่อจากไคลเอนต์ A ไปยังเซิร์ฟเวอร์ B แต่กำหนดเส้นทางการรับส่งข้อมูลอย่างปลอดภัยผ่านเซิร์ฟเวอร์ C สิ่งนี้มีประโยชน์สำหรับการหลีกเลี่ยงไฟร์วอลล์

จาก A ให้เรียกใช้:

A$ ssh C -L localport:B:remoteport

จากนั้นหากต้องการเชื่อมต่อกับ B: รีโมตพอร์ตให้เชื่อมต่อกับ localhost: localport

หากคุณใช้ add -g ทุกคนที่สามารถเข้าถึง A อาจเชื่อมต่อกับ B: รีโมตพอร์ตผ่าน A: localport

ตัวอย่างเช่นสมมติว่างานของคุณถูกห้าม reddit.com เรียกใช้สิ่งนี้:

# ssh yourserver -L 80:reddit.com:80

และตั้งค่าที่อยู่ของ reddit.com และ www.reddit.com เป็น 127.0.0.1 ใน / etc / hosts (คุณจะต้องปิดการใช้งานเว็บเซิร์ฟเวอร์ในพื้นที่) ทีนี้มันก็จะส่งข้อมูลไปยัง reddit.com อย่างลับ ๆ ล่อๆผ่าน yourserver ของคุณ

หากคุณทำสิ่งนี้บ่อยครั้งคุณอาจต้องการเพิ่มโฮสต์พิเศษ:

Host redditfw
HostName yourserver
LocalForward 80 reddit.com:80

การส่งต่อพอร์ตระยะไกล

หรือสมมติว่าคุณต้องการให้เครื่องระยะไกล B เข้าถึงเครื่องอื่น A โดยผ่านเครื่องท้องถิ่นของคุณอย่างปลอดภัย C

จากนั้นใน C คุณสามารถเรียกใช้:

C$ ssh B -R remoteport:A:targetport

ณ จุดนี้ผู้ใช้โลคัลบน B สามารถเชื่อมต่อกับ A: targetport ผ่าน localhost: remoteport

หากคุณต้องการอนุญาตให้ผู้ใช้ที่ไม่ใช่คนท้องถิ่นสามารถเชื่อมต่อ A: targetport ผ่าน localhost: remoteport ได้ให้ตั้งค่าในไฟล์ sshd_config:

GatewayPorts yes

หากคุณทำสิ่งนี้บ่อยครั้งให้ตั้งค่าโฮสต์พิเศษใน ~ / .ssh / config:

Host exportme
HostName B
RemoteForward remoteport A:targetport

SSH เป็นระบบไฟล์: sshfs

การใช้โครงการ FUSE กับ sshfs เป็นไปได้ที่จะเมานต์ระบบไฟล์ระยะไกลผ่าน SSH สำหรับ Mac ให้ใช้ Fuse4x

เมื่อติดตั้งแล้วให้เรียกใช้:

$ sshfs remote-host: local-mount-directory

แหล่ง


4

SSH tunneling เหมือนกับการส่งต่อพอร์ตในบริบทนี้แม้ว่าเอกสารประกอบของ SSH และพารามิเตอร์การกำหนดค่ามักจะอ้างถึงในภายหลัง

การทันเนลหรือส่งต่อพอร์ตช่วยให้คุณสามารถห่อหุ้มทราฟฟิก TCP ภายในการเชื่อมต่อ SSH สิ่งนี้สามารถใช้ในการ

  • เข้ารหัสทราฟฟิกโดยใช้การเชื่อมต่อ SSH
  • เชื่อมต่อกับเครื่องใด ๆ ในด้านอื่น ๆ ของการเชื่อมต่อ SSH ราวกับว่าพวกเขาเป็นพอร์ตท้องถิ่น

การส่งต่อพอร์ตโลคัลคือเมื่อพอร์ต LISTEN ถูกสร้างขึ้นบนฝั่งไคลเอ็นต์ นั่นคือ คุณเปิดพอร์ตโลคัล 80 บนเครื่องของคุณเชื่อมต่อกับที่อื่น: 80 ที่ฝั่งเซิร์ฟเวอร์ของคุณ

การส่งต่อพอร์ตย้อนกลับคือเมื่อพอร์ต LISTEN ถูกสร้างขึ้นที่ฝั่งเซิร์ฟเวอร์ นั่นคือ คุณเปิดพอร์ตระยะไกล 8080 บนเซิร์ฟเวอร์โดยยึดตาม your_proxy: 8080

ไดนามิกทำหน้าที่เป็นพร็อกซี SOCKS

สถานการณ์ตัวอย่าง:

  • คุณต้องใช้งาน GUI บนเซิร์ฟเวอร์ระยะไกล X ไม่ได้เข้ารหัสและคุณต้องเปิดพอร์ตจากเซิร์ฟเวอร์ไปยังไคลเอนต์ของคุณในไฟร์วอลล์ทั้งหมดที่อยู่ระหว่างนั้น Tunneling กำจัดความไม่มั่นคงและความต้องการของกฎของไฟร์วอลล์
  • คุณต้องเชื่อมต่อกับเซิร์ฟเวอร์ที่สามคุณไม่สามารถเข้าถึงโดยตรงจากลูกค้าของคุณ คุณสามารถใช้แอปไคลเอนต์บนเซิร์ฟเวอร์ผ่านทางบรรทัดคำสั่งหรือใช้แอพไคลเอ็นต์กราฟิกบนพีซีของคุณผ่านช่องสัญญาณ
  • หากคุณมีบริการบนเซิร์ฟเวอร์ SSH ที่รับฟังเฉพาะบน localhost คุณสามารถเชื่อมต่อจากพีซีโดยใช้ช่องสัญญาณ นั่นคือ เซิร์ฟเวอร์ mysql สามารถจัดการผ่านแอพแบบกราฟิกจากพีซีของคุณโดยไม่จำเป็นต้องเปิดพอร์ตในไฟร์วอลล์หรือเปิดเผยบริการไปยังเครือข่ายทั้งหมด
  • ใช้เป็นพร็อกซีเพื่อเลี่ยงผ่านการตรวจสอบ HTTP บริษัท บางแห่งใช้พร็อกซีสำหรับพีซี แต่เซิร์ฟเวอร์มักจะไม่ทำ

ฉันไม่คิดว่านี่เป็นคำตอบของคำถามเพราะฉันไม่สามารถอธิบายสิ่งนี้กับคนที่ไม่มีความเข้าใจทั่วไปเกี่ยวกับ TCP / Port forwarding / Networking โดยทั่วไป ฉันไม่สามารถใช้คำตอบนี้เพื่ออธิบายอธิบาย SSH ที่ส่งต่อคุณปู่ของฉัน
Jon

@Chipperyman ดีมีอุปัฏฐากและมีอุปัฏฐาก หากคุณกำลังพยายามอธิบายการส่งต่อพอร์ตแบบไดนามิกไปยังคุณปู่ของคุณที่ไม่ทราบว่าที่อยู่ IP คืออะไรคุณปู่ของคุณควรนำคุณเข้าสู่บ้านที่มีการดูแล!
barlop

คุณเขียน "SSH tunneling เหมือนกับการส่งต่อพอร์ต" & lt; - ไม่ถูกต้องจริงๆ SSH tunneling ทำการส่งต่อพอร์ต แต่คุณสามารถส่งต่อพอร์ตโดยไม่มี ssh ไม่มีช่องสัญญาณ มีโปรแกรมที่เรียกว่าตัว remappers TCP ที่ฟังพอร์ตและส่งต่อไปยัง IP: PORT
barlop

@barlop: ในบริบทของ SSH ฉันว่าสิ่งเหล่านี้มีความหมายเหมือนกัน ใน "โลกภายนอก" คำบางคำอาจอ้างถึงสิ่งต่าง ๆ แต่ SSH เรากำลังพูดถึงที่นี่
Daniel B

@DanielB เอ่อ SSH ได้รับเงื่อนไขเหล่านั้นจากโลกภายนอกและ AFAIK ไม่ได้เปลี่ยนแปลง
barlop

2

สมมติว่าคุณอยู่ที่ 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 ตัวอย่าง ฉันเพิ่งเพิ่มมันเพื่อความสมบูรณ์มากขึ้น

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