SSH ไปยังคอมพิวเตอร์ที่บ้าน


21

ฉันมีหลายเครื่องที่บ้านที่ฉันต้องการเข้าถึงจากโรงเรียนโดยใช้ SSH และ VNC ในการทำเช่นนั้นฉันได้ให้ IP แบบคงที่กับพวกเขา:

  • 192.168.1.50: Windows
  • 192.168.1.51: Ubuntu
  • 192.168.1.52: Raspberry Pi / Raspbian

ฉันรู้ว่า SSH ใช้พอร์ต 22 ดังนั้นฉันสามารถส่งต่อพอร์ตนี้ไปที่ 192.168.1.51:22 บนเราเตอร์ของฉันได้ แต่ด้วยวิธีนี้ฉันจะไม่สามารถ SSH ไปยัง Raspberry Pi ของฉันได้ มีวิธีใดบ้างที่ฉันสามารถตั้งค่านี้เพื่อให้สามารถเข้าถึงทั้งสองเครื่องได้


10
คุณสามารถใช้พอร์ต ssh ที่แตกต่างกัน ผมไม่ทราบว่าวิธีการที่ยากอยู่บนหน้าต่าง แต่ในลินุกซ์เป็น Reall ง่าย ที่จะเปลี่ยนมันไปยังพอร์ต stardard ไม่ใช่ วิธีนี้คุณสามารถส่งต่อพอร์ต 22 เพื่อรับรางวัลเครื่อง (ไม่มีการเปลี่ยนแปลงที่นั่น) และพอร์ตอื่น ๆ (ไม่ใช่แบบมาตรฐาน) ไปยัง RaspberryPi
bistoco

2
@ Melebius มันเก่า แต่ก็ยังอ่านได้ดีส่วนสำคัญสำหรับฉันนั่นคือ "ข้อโต้แย้งพื้นฐานที่ฉันพยายามทำ: อย่าทำการรักษาความปลอดภัยผ่านความคลุมเครือ" นี่เป็นเรื่องเกี่ยวกับความต้องการและการแก้ไขอย่างง่ายดาย . ที่กล่าวว่าบางทีเขาไม่จำเป็นต้องเปลี่ยนพอร์ต ubuntu หรือ pi เพียงส่งต่อเราเตอร์ที่แตกต่างกันไปยังพอร์ตของเครื่อง 22 พอร์ต
bistoco

1
@bistoco เห็นด้วย อย่างไรก็ตาม OP กำลังจะเปิดเผยการเข้าถึง SSH ไปสู่โลกภายนอกและความปลอดภัยจะต้องได้รับการพิจารณาในกรณีเช่นนี้เสมอ การตั้งค่าพอร์ตต่าง ๆ บนคอมพิวเตอร์ไม่ได้ช่วยแก้ปัญหาของ OP เนื่องจากเขาต้องการเปิดใช้งานพอร์ตต่าง ๆ (= การส่งต่อพอร์ต) บน / เราเตอร์ของเขา
Melebius

6
@ Melebius Off topic แต่ฉันไม่เคยใช้ 22 เพียงเพราะบอทอัตโนมัติจะไม่ทำให้เซิร์ฟเวอร์ของฉัน 24/7 มันจะไม่ทำให้ผู้โจมตีที่แท้จริง (หรือสคริปต์ที่เขียนดี) ออกมา แต่จะลดจำนวนรายการบันทึกของฉัน
Kaz Wolfe

4
คุณสามารถเชื่อมต่อกับหนึ่งในนั้น (ที่เป็นสาธารณะสามารถเข้าถึงได้) และเชื่อมต่อจากที่นี้โดยใช้ที่อยู่ในท้องถิ่นไปยังอีก
tkausl

คำตอบ:


32

หากคุณมี IPv6 คุณไม่จำเป็นต้องส่งต่อพอร์ตอีกต่อไป! เพียงรับที่อยู่ IPv6 ถาวรของคุณ (ตามที่อยู่ MAC ของคุณดังนั้นจึงรับประกันว่าจะยังคงเหมือนเดิมเว้นแต่ ISP ของคุณจะไม่ทราบว่า IPv6 ทำงานอย่างไร) และใช้สิ่งนี้ในการขุดอุโมงค์เนื่องจากที่อยู่ IPv6 ของคุณเป็นสาธารณะ เพื่อเข้าถึงคุณโดยไม่ต้องผ่าน NAT ในพื้นที่ของคุณคุณไม่จำเป็นต้องกังวลกับการเปิดใช้การส่งต่อพอร์ตได้ทุกที่ มันจะ "ทำงานได้"

อย่างไรก็ตามโปรดทราบว่า IPv6 ยังไม่รองรับทั่วโลกและการเชื่อมต่ออินเทอร์เน็ตที่บ้านและการเชื่อมต่ออินเทอร์เน็ตระยะไกลของคุณจำเป็นต้องมี IPv6 ที่ทำงานได้อย่างสมบูรณ์เพื่อดำเนินการนี้

อย่างไรก็ตามถ้าคุณชอบคนส่วนใหญ่และมี IPv4 เพียงอย่างเดียวก็ยังมีวิธีอยู่! เราเตอร์บางตัวช่วยให้คุณสามารถส่งต่อพอร์ตต้นทางไปยังพอร์ตปลายทางที่ต้องการได้เช่น:

ป้อนคำอธิบายรูปภาพที่นี่

ในตัวอย่างนี้พอร์ต22จะถูกส่งตรงไปยังเครื่องของฉันsheepdogในขณะที่พอร์ต292จะถูกส่งต่อไปยังพอร์ตบน22coyote

สุดท้ายหากเราเตอร์ของคุณไม่ได้มีคุณสมบัตินี้คุณก็สามารถเปลี่ยนพอร์ตเช่น SSH ไม่ได้ จำกัด 22อยู่เพียงแค่ทำงานบนพอร์ต คุณสามารถตั้งค่าเป็นสิ่งที่คุณต้องการ (ที่ไม่ได้ใช้งาน)

ใน/etc/ssh/sshd_config(คุณต้องรูทเพื่อแก้ไขsudo nano /etc/ssh/sshd_config) มีบรรทัดที่ด้านบนของไฟล์:

# What ports, IPs and protocols we listen for
Port 22

เปลี่ยนเป็นสิ่งที่คุณต้องการ:

# What ports, IPs and protocols we listen for
Port 2992

รีสตาร์ทเซิร์ฟเวอร์ SSH ด้วยsudo service ssh restartและส่งต่อพอร์ตบนเราเตอร์


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


2
คุณสามารถใช้โบรกเกอร์ทันเนล IPv6 เพื่อรับที่อยู่ IPv6 หาก ISP ของคุณไม่รองรับ IPv6
André Borie

1
เมื่อใช้ "ฟีเจอร์นี้" คุณหมายถึงการส่งต่อพอร์ตไปยังพอร์ตอื่นหรือไม่?
Liu Siyuan

@LiuSiyuan Yep ฉันรู้ว่ามันแปลก แต่ฉันเห็นเราเตอร์บางตัวที่ไม่สามารถจัดการได้ เราเตอร์ ISP ที่ให้มาเก่าของฉันไม่สามารถลองได้
Kaz Wolfe

ไม่ได้รับส่วนที่ค่อนข้าง IPv6 เราจะสมมติว่า ISP ทั้งหมดที่ให้ที่อยู่ IPv6 มอบที่แตกต่างกัน (สอดคล้องกัน) สำหรับแต่ละอุปกรณ์ในเครือข่ายหรือไม่
jjmontes

1
@jjmontes หาก ISP ของคุณมีความสามารถคุณจะได้รับเต็ม / 64 (หรืออาจจะน้อยกว่า แต่ก็ยังเพียงพอที่จะกำหนดหนึ่งเครื่องให้กับทุกเครื่อง)
Kaz Wolfe

19

วิธีง่าย ๆ ในการแก้ปัญหานี้คือการแมปพอร์ตต่าง ๆ จากเราเตอร์ของคุณไปยังพอร์ต 22 ของเครื่องของคุณ ตัวอย่างเช่นคุณสามารถมีการตั้งค่าต่อไปนี้ในเราเตอร์ของคุณ (สมมติว่าเราเตอร์ของคุณมี IP 1.2.3.4)

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)

จากนั้นเมื่อคุณใช้ ssh ระบุพอร์ตที่คุณต้องการใช้โดยการพิมพ์

$ ssh <username>@<router ip> -p <your port>

ตอนนี้คุณควรจะสามารถเชื่อมต่อกับเครื่องทั้งหมดของคุณ


11

หากคุณรู้ว่าคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณไม่ทำงานคุณยังสามารถใช้เป็นพร็อกซี ssh ได้อีกด้วย

สมมติว่าคุณมีการตั้งค่าชื่อโดเมนสำหรับที่อยู่ IP ภายนอกของคุณ (เช่น myhome.dyndns.com หรืออะไรก็ตาม) สิ่งที่คุณจะทำคือเชื่อมต่อกับคอมพิวเตอร์หนึ่งเครื่อง (สมมติว่า raspberry อยู่เสมอและส่งต่อพอร์ตจากเราเตอร์ของคุณไปยัง มัน) การเชื่อมต่อ ssh ของคุณจะเป็น:

โรงเรียน -> (เราเตอร์โปร่งใสที่นี่) -> raspberry -> Ubuntu หรือ windows

ในตอนนี้ใน ~ / .ssh / config ที่โรงเรียนให้เพิ่มบรรทัด:

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %r@myhome.dyndns.com

ในการเชื่อมต่อแล้ว:

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)

จากตอนนี้ถ้าคุณพิมพ์ ssh ubuntu คอมพิวเตอร์จะเชื่อมต่อกับราสเบอร์รี่ก่อนแล้วจึงเริ่มเซสชัน ssh กับคอมพิวเตอร์ ubuntu

ฉันแนะนำคุณไม่ว่าพอร์ตใดที่คุณเลือกที่จะส่งต่อเพื่อปิดการใช้งานรหัสผ่านใน /etc/sshd.conf เพื่ออนุญาตเฉพาะการล็อกอินผ่านคีย์ ssh เท่านั้น วิธีนี้หากคุณตั้งค่าคีย์บนราสเบอร์รี่และบน Ubuntu ด้วยพารามิเตอร์ 'ForwardAgent' คุณจะต้องปลดล็อคคีย์เท่านั้นจากนั้นไม่จำเป็นต้องใช้รหัสผ่านในการเชื่อมต่อ วิธีนี้แม้ว่าบอตกำลังพยายามเข้าสู่ระบบบน ssh ของคุณพวกเขาจะไม่สามารถเข้าสู่ระบบได้เนื่องจากคุณไม่อนุญาตให้ลงชื่อเข้าใช้รหัสผ่าน

โบนัสนี้ใช้ได้กับ scp, scp fub ubuntu: / tmp / foo จะใช้การตั้งค่าเดียวกันโดยไม่มีพารามิเตอร์เพิ่มเติม โบนัส 2 การตั้งค่านี้ไม่จำเป็นต้องทำการเปลี่ยนแปลงใด ๆ ที่บ้านหากในวันพรุ่งนี้คุณและคอมพิวเตอร์เครื่องอื่นเพียงคัดลอก / วางรหัสในการกำหนดค่า ssh ของคุณเปลี่ยนโฮสต์และ ip นั่นคือมันไม่จำเป็นต้องเปิดพอร์ตใหม่บนเราเตอร์


มีข้อเสียของการใช้เครื่องเป็นสื่อกลางสำหรับ SSH หรือไม่? สมมติว่าฉันใช้ Raspberry Pi ของฉันเพื่อเชื่อมต่อกับคอมพิวเตอร์อื่น ๆ ภายในเครือข่ายประสิทธิภาพของมันจะมีผลกับงานหรือไม่
acourchesne

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

4

ฉันทำสิ่งนี้ - ฉันปล่อย rpi ขึ้นแล้วเสียบเข้ากับเราเตอร์โดยตรงตลอดเวลา (เนื่องจากมันถูกที่สุดที่จะทำงาน) และแค่ ssh เข้าไปจากนั้นก็เด้งจากที่อื่น ๆ - มันไม่ต้องการความสนใจมากนัก

นอกจากนี้ยังเป็นไปได้ที่จะ VNC / RDP GUI ผ่านท่อ ssh, kinda fun, หรือส่งต่อพอร์ตที่ให้คุณสามารถเรียกดูเซิร์ฟเวอร์บนคอมพิวเตอร์เดสก์ท็อปของคุณในขณะที่ยังคงความเป็นส่วนตัว

เหตุผลที่ฉันเพิ่มคำตอบนี้ไปให้คำแนะนำกับคุณ

1) ใช้พอร์ตที่แตกต่างจาก 22. คุณสามารถทิ้งไว้ที่ 22 บน PI ได้ แต่เปลี่ยนพอร์ตที่เข้ามาในเราเตอร์ของคุณเป็นอะไรที่มากกว่า 10,000 ... มิฉะนั้นคุณจะได้รับการโจมตีนับร้อยเป็นร้อยครั้งต่อวัน เป็นที่รู้จักกันดีว่ากำลังใช้งานโฮสต์ SSH เมื่อพบว่ามีช่องโหว่ที่สองคุณเป็นเจ้าของ

2) ใช้ใบรับรองแทนชื่อผู้ใช้ / รหัสผ่าน - ปิดการใช้งานชื่อผู้ใช้ / รหัสผ่านโดยสมบูรณ์

3) หากที่อยู่ IP ของคุณสามารถเปลี่ยนแปลงได้ให้ใช้บริการพิมพ์ Dyndns เพื่อรับ DNS hosthame ด้วยตัวเอง (ฉันใช้ noip ได้ฟรีและพวกเขาสนับสนุนไคลเอนต์ Linux เพื่ออัปเดตที่อยู่ IP ของคุณ - ฉันคิดว่าคุณสามารถทำได้ ปี่ตอนนี้) ยังมี บริษัท อื่นอีกไม่กี่แห่งที่ให้บริการฟรี

4) รักษา pi ของคุณ (หรืออะไรก็ตามที่คุณต้องการ) อยู่เสมอ (sudo apt-get update) ฉันเชื่อว่า ssh นั้นได้รับการตรวจสอบอย่างดีในตอนนี้ แต่ฉันก็เชื่อว่า https ...


3

สงสัยว่าสิ่งนี้จะเหมาะกับความคิดเห็นมากกว่าคำตอบหรือไม่ แต่ฉันจะโพสต์ไว้ที่นี่ต่อไป

บางสิ่งที่คุณควรพิจารณาก่อนทำสิ่งนี้:

  1. คุณจะเปิดระบบของคุณไปยังอินเทอร์เน็ตดังนั้นคุณควรตรวจสอบให้แน่ใจว่าระบบเหล่านั้นได้รับการติดตั้งอย่างดีและการกำหนดค่าความปลอดภัยของคุณนั้นแข็งตัว (เช่นไม่อนุญาตให้เข้าสู่ระบบรูทและใช้ pubkeys แทนรหัสผ่าน)
  2. IP สาธารณะของคุณ (ดู whatismyip.com) สามารถเปลี่ยนแปลงได้ขึ้นอยู่กับ ISP ของคุณว่าสามารถเปลี่ยนแปลงได้ทุกวันหรือแทบไม่เคยเลย ซึ่งหมายความว่าคุณจะต้องหาวิธีหาไอพีสาธารณะของคุณ คุณสามารถเยี่ยมชม whatismyip.com จากเครือข่ายในบ้านของคุณทุกวันสร้างแอพบางตัวหรือใช้ Dynamic DNS (DynDNS) เพื่อแมป IP สาธารณะที่เปลี่ยนไปของคุณกับชื่อโดเมนแบบคงที่
  3. หากคุณต้องการใช้ IPv6 เพื่อหลีกเลี่ยงความยุ่งยากทั้งหมดที่เกี่ยวข้องกับ IPv4 และ NATing คุณจะต้องใช้อุปกรณ์เราเตอร์ ISP ของคุณ ... เพื่อพูดคุย IPv6 เช่นกัน มีบริการบางอย่างที่สามารถช่วยคุณได้เมื่อ ISP ของคุณไม่รองรับ IPv6 แต่อุปกรณ์และเราเตอร์ของคุณจะต้องคุยกันอยู่ดี
  4. พอร์ตและอุปกรณ์ที่คุณเปิดอินเทอร์เน็ตยิ่งมีมากขึ้นพื้นที่การโจมตีของคุณก็จะยิ่งมากขึ้น ฉันขอแนะนำให้ใช้กล่องกระโดดในเครือข่ายของคุณและอนุญาตให้ SSH เข้าถึงอุปกรณ์นั้นจากอินเทอร์เน็ตเท่านั้น โดยทั่วไปแล้วกล่องกระโดดจะเป็นระบบที่แข็งมากที่คุณส่งต่อเราเตอร์ของคุณไปยังอินเทอร์เน็ต เมื่อเชื่อมต่อกับกล่องนั้นคุณจะสามารถ SSH กับเครือข่ายภายในของคุณผ่านทางมัน กล่องกระโดดอาจเป็น Raspberry Pi ตัวอื่นได้ ฉันขอแนะนำให้ใช้อุปกรณ์เฉพาะเพื่อให้สามารถแข็งตัวได้มากที่สุดเท่าที่จะเป็นไปได้
  5. (4a) แทนที่จะมีกล่องกระโดดที่คุณใส่ไว้ใน SSH คุณสามารถตั้งค่าเซิร์ฟเวอร์ VPN ซึ่งอนุญาตให้คุณเรียกดูเครือข่ายภายในบ้านของคุณจากอุปกรณ์ที่โรงเรียน (ถ้าอนุญาตการเชื่อมต่อ VPN ขาออก)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.