วิธีการใช้ SSH จากเครือข่ายในบ้าน


16

ฉันเพิ่งตั้งค่า SSH บน Raspberry Pi ของฉัน มันได้รับไป swimmingly โดยเฉพาะอย่างยิ่งตั้งแต่ผมสามารถควบคุมคอมพิวเตอร์ผ่าน iPhone ของฉันด้วยแอปเซิร์ฟเวอร์ของผู้สอบบัญชี น่าเศร้าที่ใช้งานได้ผ่านเครือข่ายท้องถิ่นเท่านั้น

ฉันจะทำให้ SSH ทำงานได้อย่างไรเมื่อฉันออกจากบ้าน? (ทำงานร่วมกับแอปได้)


คุณสามารถส่งต่อพอร์ตจากเราเตอร์ของคุณได้หรือไม่
SteveIrwin

1
@SteveIrwin ฉันมีโอกาสมากที่สุดที่สามารถ แต่เนื่องจากผมไม่ได้สร้างเครือข่ายความรู้ผมต้องการแก้ปัญหาง่ายเช่นPort แผนที่ ที่จริงแล้ว ... ถ้าฉันแบ่งปันอินเทอร์เน็ตของ Mac กับ Pi ฉันจะสามารถแชร์พอร์ตที่ส่งต่อได้หรือไม่
xxmbabanexx

1
การตั้งค่าพอร์ตไปข้างหน้าอาจเป็นเรื่องง่ายอย่างน้อยเหมือนกับการใช้พอร์ตแผนที่ คุณต้องบอกเราเพิ่มเติมเกี่ยวกับวิธีการตั้งค่า LAN ของคุณ
John La Rooy

ทางออกที่ดีที่สุดของคุณคือการติดตั้งบริการ Weaved (www.weaved.com) และทำได้ด้วย แบบฝึกหัดอื่น ๆ ทั้งหมดที่คุณพบบนอินเทอร์เน็ตจะนำคุณสู่เส้นทางที่น่าหงุดหงิด
IgorGanapolsky

สำหรับโพสต์ที่แนะนำการใช้ socketxp ให้ใช้สิ่งต่อไปนี้เพื่อดาวน์โหลด socketxp ใน RPI curl -O portal.socketxp.com/download/arm/socketxp && chmod + wx socketxp && sudo mv socketxp / usr / local / bin แทน linux ไฟล์.
jeonghoon

คำตอบ:


20

นี่คือขั้นตอนที่ฉันใช้ (บนเดเบียน) ซึ่งคุณอาจพบว่ามีประโยชน์

1. การตั้งค่า IP แบบคงที่สำหรับ Pi

a. เปิดไฟล์อินเตอร์เฟสโดยใช้คำสั่ง

sudo nano /etc/network/interfaces

b.Change ไฟล์อินเตอร์เฟสต่อไปนี้ (ใช้งานได้สำหรับฉันฉันไม่แน่ใจว่าสามารถแยกบรรทัดบางส่วนออกได้หรือไม่)

auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.2  #static ip you want for the pi
netmask 255.255.255.0
gateway 192.168.1.1    # the ip address of the router

c.Check ถ้า Ip ถูกเปลี่ยนโดยใช้คำสั่งifconfig

2. การตั้งค่า DNS แบบไดนามิก

ส่วนใหญ่ที่อยู่ IP ที่ได้รับมอบหมายจาก ISP ของคุณเป็นแบบไดนามิกดังนั้นเราจึงต้องการวิธีแก้ไขการเปลี่ยนแปลงที่อยู่ IP ฉันใช้ซอฟต์แวร์ dnsdynamic และ ddclient เพื่อให้บรรลุสิ่งนี้ทั้งสองใช้งานได้ฟรี

a. สมัครบัญชีdnsdynamic

b. เพิ่มโดเมนใหม่และเลือกชื่อและโดเมนจากรายการคุณสามารถเลือกโดเมนใด ๆ ที่มีให้คุณเลือกโดเมนย่อยคลิกที่ตรวจสอบความพร้อมใช้งานแล้วเพิ่ม

สกรีนช็อตของ dnsdynamic

3. ตั้งค่า ddclient บน Pi

a.Install ddclient โดยใช้คำสั่ง

sudo apt-get install ddclient

b. เปิดไฟล์การกำหนดค่าสำหรับ ddclient โดยใช้คำสั่งต่อไปนี้และเพิ่มบรรทัดต่อไปนี้

sudo nano /etc/ddclient.conf

และเปลี่ยนไฟล์เป็นดังนี้

# /etc/ddclient.conf
daemon=600
timeout=10
ssl=yes
protocol=dyndns2
use=web, web=myip.dnsdynamic.com
server=www.dnsdynamic.org
login=x@gmail.com  #userid for dnsdynamic.com
password='xxxx'      #password for the same put inside quotes
x.dnsdynamic.com  #the domain name you created

และบันทึกไฟล์

d. เราต้องการให้บริการ ddclient เริ่มต้นใหม่โดยอัตโนมัติเมื่อเริ่มต้นใหม่ดังนั้นให้ทำดังต่อไปนี้

sudo nano /etc/rc.local

เพิ่มคำสั่งต่อไปนี้ก่อนที่จะออก 0 (ซึ่งเป็นบรรทัดสุดท้าย)

sudo /usr/sbin/ddclient -daemon 600 -syslog

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

4. การส่งต่อพอร์ต

a.Find รูปแบบของเราเตอร์ของคุณ

b. ไปที่portforward.com

c. ป้อนแบรนด์เราเตอร์และรุ่นของคุณเพื่อค้นหาคำแนะนำโดยละเอียดเกี่ยวกับพอร์ตการส่งต่อ

d. หลังจากเลือกแบรนด์และรุ่นของเราเตอร์คลิกที่คู่มือเริ่มต้นจากหน้าเปลี่ยนเส้นทาง

e.In กล่องข้อความ IP แบบคงที่ป้อน IP แบบคงที่ของ Pi ที่คุณให้ไว้ในขั้นตอนที่ 1

f. ทำตามขั้นตอนและไปข้างหน้าพอร์ต 22 พอร์ตต้นทางต้องเป็น 22 และพอร์ตปลายทางสามารถเป็นอะไรก็ได้โปรดอย่าลืมใช้พอร์ตปลายทางเมื่อ sshing เป็น pi เพื่อหลีกเลี่ยงความสับสนฉันมักจะใช้แหล่งที่มาและปลายทางเดียวกัน ท่าเรือ.

หากคุณกำลังติดตามบทสอนเข้าสู่ระบบ pi ของคุณจากที่ใดก็ได้โดยใช้การแทนที่ที่อยู่ ip ด้วยชื่อโดเมน เช่น - ฉันใช้ pi@hometorrent.dnsdynamic.com: 22 เพื่อ ssh เข้าสู่ pi ของฉัน


ขอบคุณมาก! เมื่อฉันกลับมาจากการเยี่ยมชมเอ็กซีเตอร์ฉันจะลองดู!
xxmbabanexx

1 คำตอบที่ดี แต่คุณไม่จำเป็นต้องที่จะใช้sudoในการ/etc/rc.localไม่ว่าทำงานอยู่แล้วเป็นราก?
HeatfanJohn

ดังนั้นการกำหนดค่า Ngrok และ Weaved ของฉันจึงทำให้เมาทั้งหมด ตอนนี้ฉันไม่สามารถเชื่อมต่อได้เลย!
IgorGanapolsky

2

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

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

สุดท้ายใช้ ssh ทำต่อไปนี้:

$ ssh -p 23456 user@IP

ที่ไหน:


เหตุใดฉันจึงไม่สามารถใช้พอร์ต 22 แทน 23456 ที่กำหนดเองได้
IgorGanapolsky

1
@IgorGanapolsky คุณสามารถทำได้ แต่ 1) หากคุณมีคอมพิวเตอร์เครื่องอื่นที่คุณต้องการเชื่อมต่อผ่าน SSH นอกบ้านของคุณจะมีความขัดแย้งและ 2) มีความเสี่ยงมากกว่าเนื่องจาก "แฮกเกอร์" พยายามเข้าสู่ระบบผ่านพอร์ต 22 เพื่อปิดมันออกมักจะแนะนำบนเซิร์ฟเวอร์
meneldal

2

การเข้าถึง RaspberryPi ของคุณ (หรือแม้กระทั่งแล็ปท็อป / เซิร์ฟเวอร์) จากนอกเครือข่ายในบ้านของคุณ (หมายถึงจากอินเทอร์เน็ต) ไม่ใช่เรื่องง่ายเพราะแล็ปท็อปที่บ้านหรือ RaspberryPi ของคุณมีที่อยู่ IP ท้องถิ่นเท่านั้น (ในช่วง 10.xxx หรือ 192.168.xx พิสัย). ไม่มีที่อยู่ IP สาธารณะที่สามารถมองเห็นได้จากอินเทอร์เน็ต

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

SocketXP มอบวิธีที่ง่ายปลอดภัยและง่ายต่อการเข้าถึง RaspberryPi บ้านของคุณจากเครือข่ายภายนอก SocketXP ไม่ต้องการให้คุณแฮ็คการตั้งค่าใด ๆ ในเราเตอร์ WiFi ของคุณ มันทำงานนอกกรอบ หากต้องการทราบวิธีการตั้งค่า RaspberryPi ของคุณเป็น SSH จากภายนอกอ่านบล็อกนี้เกี่ยวกับวิธีการ SSH ระยะไกลเป็น RaspberryPi ของคุณโดยใช้ SocketXP

วิธีการตั้งค่า SocketXP:

ขั้นที่ 1 : ติดตั้งไคลเอนต์ SocketXP บน RaspberryPi ของคุณโดยใช้คำสั่งต่อไปนี้

$ curl -O https://portal.socketxp.com/download/linux/socketxp && chmod +wx socketxp && sudo mv socketxp /usr/local/bin

ขั้นตอนที่ 2: เชื่อมต่อไคลเอ็นต์ SocketXP ด้วยบริการ SocketXP Cloud โดยใช้คำสั่งต่อไปนี้ คุณต้องลงทะเบียนที่https://portal.socketxp.comเพื่อรับ auth-token ที่เป็นเอกลักษณ์ของคุณ

$ socketxp -register "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDk1MTg0MDAsImlkIjoiZ2FuZXNodmVscmFqYW5AZ21ha6K208n0.cB2uYevpH4lWIQGQUJdQ0eiEDqS8OiP_YOiqernnui3rjjadfadsfsfas34"

ขั้นตอนที่ 3 : รับจุดสิ้นสุดอุโมงค์สาธารณะเพื่อเข้าถึง RaspberryPi ของคุณจากอินเทอร์เน็ต

$ socketxp -connect tcp://localhost:22

Tunnel Access -> tunnel.socketxp.com:35277

ขั้นตอนที่ 4 : SSH ใน RaspberryPi ของคุณจากอินเทอร์เน็ตโดยใช้คำสั่งต่อไปนี้

$ ssh raspberry-username@tunnel.socketxp.com -p 35277

โดยที่ "raspberry-username" เป็นชื่อผู้ใช้ / รหัสผ่านที่คุณใช้ในการเข้าสู่ระบบ SSH เพื่อ RaspberryPi ของคุณ


1

คำถามนี้เก่าเมื่อเวลาผ่านไปมีโอกาสน้อยกว่าที่คุณจะได้รับที่อยู่ IPv4 สาธารณะที่เข้าถึงได้ เป็นไปได้ว่าคุณอยู่เบื้องหลัง CGNAT ซึ่งหมายความว่าคุณแบ่งปัน IPv4 สาธารณะเพียงครั้งเดียวกับลูกค้ารายอื่น ๆ ของ ISP ดังนั้นจึงเป็นไปไม่ได้ที่จะทำการส่งต่อพอร์ตไปยัง PI ของคุณหรืออย่างอื่น

หากคุณมี IPv6 คุณสามารถระบุที่อยู่แบบคงที่ของ PI และอนุญาตให้เข้าถึงได้จากเราเตอร์ของคุณ ผู้ให้บริการมือถือหลายรายให้ IPv6 กับโทรศัพท์ ISP ที่ใช้ที่ดินเป็นหลัก (ไฟเบอร์, DSL, เล้าโลมและอื่น ๆ ) มักลากเท้าของพวกเขา

นอกจากนี้คุณยังสามารถรับ VPS ราคาถูก (เซิร์ฟเวอร์ส่วนตัวเสมือน) ด้วย IPv4 สาธารณะที่ไหนสักแห่งในคลาวด์และสร้าง SSH-tunnel จาก PI ไปยัง VPS


0

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

คุณอาจต้องการติดตั้งinadynแพคเกจบน Raspberry Pi ของคุณเพื่ออัปเดตรายการ No-IP DNS ของคุณเมื่อ IP เปลี่ยน คุณสามารถทำได้โดยการเรียกใช้:

sudo apt-get install inadyn

จาก Inadyn README ฉันรับสายนี้:

inadyn --dyndns_system default@no-ip.com -u USER-p PASS -a HOST

หวังว่านี่จะช่วยได้


No-Ip มี DUC (ไคลเอนต์ update แบบไดนามิก) ซึ่งจะทำให้แน่ใจว่า IP ของคุณจะไม่เปลี่ยนแปลง
IgorGanapolsky

0

เพิ่มเติมจากคำตอบของสตีฟเออร์วิน:

ขั้นตอนที่ 1:

หากคุณเชื่อมต่อผ่าน wlan ให้ใช้:

iface wlan0 inet static
wpa-ssid "xxx" #<=your ssid
wpa-psk "yyy"  #<=your pw
address 192.168.1.xxx #<=preferred static ip (xxx<255)
netmask 255.255.255.0
gateway 192.168.1.1 #<=router's ip

ขั้นตอนที่ 2:

หลังจากที่คุณเปลี่ยนแปลงข้างต้นคุณต้องรีสตาร์ทnetworking:

sudo /etc/init.d/networking restart

ฉันยังเพิ่ม 2 บรรทัดที่ด้านหน้าของบล็อกคงที่ auto wlan0 allow-hotplug allow-hotplug w ฉันพบในโพสต์นี้raspberrypi.stackexchange.com/a/10320/10148ฉันพยายามทำโดยไม่มีพวกเขา แต่มีบางอย่างไม่ทำงาน
XandruCea

คำตอบนี้ควรพิจารณาว่าล้าสมัยเนื่องจากการเปลี่ยนแปลงในการกำหนดค่าเครือข่ายและระบบ init ของ Raspbian
goldilocks

0

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


0

ดังนั้นคุณมีเซิร์ฟเวอร์ ssh (Raspberry PI ของคุณ) อยู่หลังไฟร์วอลล์ (เราเตอร์ของคุณ) และคุณต้องการเชื่อมต่อจากที่ใดก็ได้ ให้ถือว่าเซิร์ฟเวอร์ ssh ของคุณตั้งค่าไว้อย่างถูกต้องเช่นการเรียกใช้ 'ชื่อผู้ใช้ @ localhost date' บน Raspberry ของคุณจะแสดงวันที่ / เวลาปัจจุบัน

คุณต้องแก้ปัญหาที่สอง:

  • เราเตอร์ของคุณต้องส่งต่อพอร์ตคงที่ไปยังพอร์ต raspberry ssh ของคุณ (ปกติคือ 22)
  • คุณต้องรู้ว่าที่อยู่ IP สาธารณะของเราเตอร์ของคุณ (ซึ่งโดยปกติแล้วการเปลี่ยนแปลงที่เราเตอร์จะทำการเชื่อมต่อใหม่และมากที่สุดเท่าที่ 24 ชั่วโมง)

การส่งต่อพอร์ต & DynDNS

มีวิธีแก้ไขปัญหา (ตามที่ผู้อื่นชี้ให้เห็น):

  • การเปิดพอร์ตการส่งต่อบนเราเตอร์ของคุณนั้นขึ้นอยู่กับแต่ละเราเตอร์และโดยทั่วไปแล้วจะทำบนเว็บไซต์การตั้งค่าเราเตอร์
  • การระบุ ip ปัจจุบันทำได้ง่ายที่สุดโดยเว็บไซต์ภายนอก ( https://www.google.com/search?q=whats+my+ip ) หาก IP ของคุณเปลี่ยนเป็นประจำคุณสามารถรับรายการ DNS แบบไดนามิก ( https://www.noip.com/ , https://dyn.com/dns/ฯลฯ )

หากตั้งค่าอย่างถูกต้องการเชื่อมต่อ rasbperry pi ของคุณอาจทำได้ด้วย:

ssh username@[yourIP] -p [port] 
# or using dyndns 
ssh username@myname.dyndns.org -p [port]

ใช้ sshhub.de

อีกวิธีที่สะดวกมากที่ไม่ได้กล่าวถึงก็คือSSHHub (ผู้เปิดเผยฉันเป็นผู้เขียน) มันใช้การส่งต่อของ ssh ในการเข้าถึง Rasperry PI ของคุณจากทุกที่ มันน่าเชื่อถือฟรีและสวยตั้งง่าย ลงทะเบียนครั้งเดียว:

ssh info@sshhub.de register

ใช้ราสเบอร์รี่ PI ของคุณ:

while true; do ssh [username]@sshhub.de -R 22:localhost:22 -N -o ServerAliveInterval=10; sleep 10; done

... และนั่นมัน! คุณสามารถเชื่อมต่อ Raspberry Pi ของคุณได้จากทุกที่:

ssh -J [username]@sshhub.de localhost

สวัสดีและยินดีต้อนรับสู่ราสเบอร์รี่ Pi! กรุณาใช้การท่องเที่ยวและเยี่ยมชมศูนย์ช่วยเหลือเพื่อดูว่าสิ่งที่ทำงานที่นี่ ขอบคุณสำหรับการสนับสนุนของคุณ แต่โปรดทราบว่าเราขอให้คุณที่จะเปิดเผยความเกี่ยวพันของคุณในคำตอบของคุณ (ฉันถือว่าคุณเป็นผู้เขียนซอฟต์แวร์ที่แนะนำ)
Ghanima

ขอบคุณที่ชี้นำฉันในทิศทางที่ถูกต้อง ฉันเป็นคนเขียน แน่นอนฉันต้องการให้คุณค่ากับคำตอบของฉันสำหรับคนที่กำลังมองหาวิธีแก้ปัญหา และฉันหวังว่าฉันจะทำเช่นเดียวกับ sshhub เอง
โอลิเวอร์

0

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

ตัวเลือกอื่นคือใช้บริการเช่น ZeroTier ซึ่งมีเซิร์ฟเวอร์ส่วนกลางสำหรับสร้าง VPN ดังนั้นคุณไม่จำเป็นต้องเรียกใช้เซิร์ฟเวอร์ของคุณเอง นี่เป็นฟรี


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