ฉันจะกำหนดค่าเช่นนั้นฉันสามารถ SSH กับระบบของฉันผ่านอินเทอร์เน็ตบน IP แบบไดนามิกได้อย่างไร


11

โดยทั่วไปฉันต้องการที่จะสามารถทำบางสิ่งบางอย่างเช่น teamviewer โดยไม่คำนึงถึงการกำหนดค่าเครือข่ายตราบใดที่ทั้งเซิร์ฟเวอร์ ssh ของฉัน (Machine A) และไคลเอ็นต์ ssh (Machine B) มีการเข้าถึงอินเทอร์เน็ต (และเซิร์ฟเวอร์ที่สามบางเครื่อง C) ) ฉันสามารถเข้าใช้งานได้ - นี่คือเหตุผลที่ฉันต้องการย้ายเครื่อง A ไปเสียบเข้ากับพลังงานเชื่อมต่อกับเครือข่าย wifi ที่กำหนดค่าไว้ล่วงหน้าอย่างใดอย่างหนึ่งโดยอัตโนมัติ โดยไม่ต้องมีการกำหนดค่าการส่งต่อพอร์ตหรือคล้ายกันบนเครือข่ายและสามารถเข้าสู่ระบบผ่านทางอินเทอร์เน็ตจากเครื่อง B

ฉันจะทำสิ่งนี้ได้อย่างไร ฉันไม่รังเกียจที่จะตั้งค่าบางอย่างบนเซิร์ฟเวอร์ที่มีที่อยู่ IP แบบคงที่เพื่อช่วยในการจับมือกัน แต่ฉันก็ไม่สนใจเซิร์ฟเวอร์ของบุคคลที่สามเช่นกันหากมีบางสิ่งอยู่แล้ว (เช่นเดียวกับที่ใช้สำหรับ Teamviewer)

แก้ไขเพื่อความชัดเจน: ฉันมี 3 เครื่อง, AB และ C

A เป็นราสเบอร์รี่ pi หัวขาดที่จะเปิด / ปิดในตำแหน่งสุ่มเชื่อมต่อกับเครือข่าย wifi ที่เตรียมไว้ล่วงหน้า

B เป็นเครื่องที่มีจอภาพคีย์บอร์ดและอื่น ๆ ที่ฉันต้องการเชื่อมต่อ

C เป็นเซิร์ฟเวอร์ AWS ที่เช่ามาซึ่งฉันมีด้วยที่อยู่ IP แบบคงที่สามารถใช้ SSH จาก B ได้อย่างน่าเชื่อถือและสามารถติดตั้งทุกอย่างที่จำเป็นเพื่อช่วยให้ B เชื่อมต่อกับ A


คุณสามารถ ssh ไปยังเครื่องที่ 3 ได้หรือไม่?
Anthon

@ จากนั้นฉันคิดว่าเป็นเช่นนั้นฉันตั้งชื่อพวกเขา AB และ C และเพิ่มคำอธิบายสำหรับพวกเขาหวังว่าจะล้างมันขึ้นมา
user2813274

ไอ no-ip.com อาการไอ
โจชัว

1
no-ip.com จะไม่ช่วยหากไฟร์วอลล์ในพื้นที่ของคุณไม่อนุญาตการรับส่งคืน!
bobstro

ฉันเคยใช้sshอุโมงค์นานมาก ผมไม่เคยได้รับพวกเขาที่จะอยู่ถึงแม้ว่าแม้จะมีautossh; หากอัปลิงค์ลดลงไม่ว่าด้วยเหตุผลใด ๆ พวกเขาจะต้องเริ่มต้นใหม่ด้วยมือเสมอ ในที่สุดฉันก็ตั้งค่า VPN ขนาดเล็กสำหรับตัวเองด้วย OpenVPN และทำงานได้ดีมาก
Blacklight Shining

คำตอบ:


11

เมื่อคุณมีเครื่อง C บนอินเทอร์เน็ตสร้างบัญชีพิเศษที่นั่นsesameและใน A คุณสร้างบัญชีด้วยรหัสสาธารณะ / ส่วนตัวซึ่งคุณได้คัดลอกรหัสสาธารณะไปยังsesameบัญชีใน C

ตอนนี้คุณสามารถเข้าสู่ระบบจาก A ถึง C แต่แทนที่จะทำเช่นนั้น:

ssh -N -R 19930:localhost:22 sesame@yourserverC

(คุณอาจต้องการรวมสิ่งนี้กับคำสั่ง sleep หรือเช่น 10 วินาทีและล้อมรอบด้วยการวนซ้ำไม่รู้จบดังนั้นการเชื่อมต่อจะถูกสร้างใหม่หาก WiFi ลงทำให้การเชื่อมต่อล้มเหลว)

จากเครื่อง B โดยทั่วไปเข้าสู่บัญชีใด ๆ ที่คุณมีใน C (สามารถ แต่ไม่จำเป็นต้องเป็นsesameบัญชีบัญชีต่าง ๆ เป็นสิ่งที่ฉันใช้) และเมื่อคุณอยู่ใน C ให้เข้าสู่ A โดยใช้:

ssh localhost -p 19930

แน่นอนคุณสามารถใช้ตัวเลขที่แตกต่างจาก 19930

เป็นไปได้ที่จะเรียกใช้ssh -N -R ...จาก/etc/rc.localถ้าคีย์ส่วนตัวของคุณบน A ไม่ได้รับการป้องกันด้วยรหัสผ่าน ในกรณีดังกล่าวตรวจสอบให้แน่ใจว่าได้สร้างsesameบัญชีแยกต่างหากที่มีฟังก์ชั่น จำกัด ดังนั้นเมื่อเครื่อง A ของคุณถูกบุกรุก / ถูกขโมยความเสี่ยงสำหรับเซิร์ฟเวอร์ C ของคุณจะถูก จำกัด นี่คือเหตุผลที่ฉันแนะนำให้ใช้บัญชีแยกต่างหากเพื่อรับจาก B ถึง C

จริงๆคุณสามารถตั้งค่าเปลือกเข้าสู่ระบบสำหรับsesameใน/etc/passwdการ/bin/falseดังนั้นคุณจะไม่สามารถใช้บัญชีสำหรับการเข้าสู่ระบบ


โซลูชันนี้แตกต่างจากการใช้ TeamViewer มีเซิร์ฟเวอร์ที่ใช้ในการเปิดพอร์ตซึ่งจะถูกเปลี่ยนเส้นทางไปยังการสื่อสารโดยตรง เช่นเดียวกับโปรแกรมอย่าง BitTorrent สื่อสารโดยตรงหลังจากค้นหาเครื่องที่จะดาวน์โหลดจาก (โดยไม่ต้องเปิดพอร์ตล่วงหน้าเช่นกัน)
Anthon

ดังนั้นความแตกต่างที่สำคัญคือวิธีนี้ทราฟฟิกทั้งหมดผ่านเซิร์ฟเวอร์ C, vs C ที่ใช้เพื่อสร้างลิงก์เท่านั้นและจากนั้นไม่ได้ถูกใช้สำหรับการเชื่อมต่อที่เหลือ - ฉันตกลงกับสิ่งนั้น คุณมีจุดดีเท่าที่การรักษาความปลอดภัยไปมีอะไรที่ฉันควรทำโดยเฉพาะอย่างยิ่งที่จะทำให้งาไม่สามารถทำอะไรกับ C นอกเหนือจากการเข้าสู่ระบบขั้นต่ำเปล่า? (ระบบ RHEL)
2813274

1
@ user2813274 แท้จริงอัล trafic ต้องผ่าน C ในสถานการณ์นี้ (ซึ่งจะนำประโยชน์จาก BitTorrent) ฉันไม่แน่ใจว่าคุณสามารถ จำกัดsesameบัญชีใน C ได้มากแค่ไหนมันอาจเป็นไปได้ว่าคุณสามารถทำให้มันทำงาน/bin/falseเป็นล็อกอินเชลล์ (เนื่องจาก ssh ไม่เคยล็อกอินจริงๆ) หรือ จำกัด ไว้โดยการเพิ่มcommand=พารามิเตอร์ใน~/.ssh/authorized_keys
Anthon

@ user2813274 ในกรณีที่คุณไม่ได้พยายามด้วยตัวคุณเอง: ถ้าคุณมีบัญชีพิเศษสำหรับการตั้งค่าพร็อกซีกลับคุณสามารถ/bin/falseปิดการใช้งานการเข้าสู่ระบบไปยังบัญชีนั้นโดยการเปลี่ยนเปลือกเข้าสู่ระบบเพื่อ
Anthon

1
@ user2813274 ใช่ฉันพยายามออกมานั้นและมันจะให้ฉันตั้งอุโมงค์กลับ (คุณคุณจำเป็นต้องมีบัญชีที่แตกต่างกันที่จะได้รับไปยังเซิร์ฟเวอร์ C ที่จะทำssh localhost -p portnumแน่นอน)
โธ

7

ติดตั้งอุโมงค์ IPv6 (เช่นSixxs ) บน Raspberry Pi ของคุณ ตอนนี้คุณจะมีที่อยู่ IPv6 ถาวรซึ่งจะออนไลน์เมื่อใดก็ตามที่ Pi ของคุณออนไลน์ ให้แน่ใจว่าคุณปลอดภัย Pi ของคุณในขณะที่มันเชื่อมต่อกับโลกในขณะนี้

หาก B ของคุณเชื่อมต่อกับเครือข่าย IPv6 ให้เชื่อมต่อโดยตรงกับ Pi หาก B ไม่ได้เชื่อมต่อกับเครือข่าย IPv6 ให้ใช้ C เป็นเซิร์ฟเวอร์กระโดดที่ซึ่งคุณเชื่อมต่อผ่าน IPv4 ไปยัง C จากนั้น ssh over IPv6 จาก C ไปยัง Pi ของคุณ


ฉันชอบสิ่งนี้เพราะไม่จำเป็นต้องใช้ C หากเครือข่ายรองรับ IPV6 ฉันจะต้องลองดู - ปัญหาใด ๆ ที่เกี่ยวข้องกับไฟร์วอลล์ที่บล็อกสิ่งนี้เป็นค่าเริ่มต้น
2813274

1
Sixxs มอบโปรโตคอลมากกว่าหนึ่งโปรโตคอลสำหรับใช้งานทันเนล IPv6 ถ้าคุณใช้ Anything In Anything (AYIYA) คุณจะต้องใช้พอร์ต TCP 3874 และ UDP พอร์ต 5072 ที่เปิดจาก Pi ไปยังอินเทอร์เน็ต บนเครือข่ายในบ้านสิ่งนี้ควรจะดี เครือข่ายองค์กรหรือมหาวิทยาลัยอาจแตกต่างกัน
garethTheRed

การติดตั้งอุโมงค์ฟังดูเป็นไปได้ แต่ดูเหมือนว่าฉันจะต้องสมัครใช้บริการ Sixxs รอให้พวกเขากลับไปที่ฉันด้วยที่อยู่ IP ฯลฯ - ไม่ง่ายนักอีกต่อไป - ยังคงเป็นทางออกที่ดี แต่ฉัน อย่าคิดว่ามันเป็นเส้นทางที่ฉันจะไปตอนนี้
2813274

1

ดูสิ่งนี้ด้วย:

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

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


0

บางทีคุณจำเป็นต้องใช้นอกเหนือจาก ssh หรือ tunneling .. ฉันขอแนะนำให้คุณใช้แนวคิดการส่งข้อความเช่น whatsapp หรือ telegram .. แต่ฉันคิดว่าถ้าคุณต้องการใช้บางอย่างเช่น vim มันไม่ดีเท่า ssh ..

Telegram มีไคลเอนต์ telegram-cli ที่คุณสามารถปรับเปลี่ยนเพื่อยอมรับและดำเนินการคำสั่งบางอย่างและนำไปใช้ใน raspi ..

ถ้าคุณใช้ Telegram คุณสามารถทำให้เครือข่ายของคุณง่ายขึ้นและอย่างน้อยก็ลดเครื่อง C ที่จะทำ Hub เพราะเซิร์ฟเวอร์ C นั้นถูกลบด้วยเซิร์ฟเวอร์ส่งข้อความโทรเลข .. telegram ขึ้นมาพร้อมกับไคลเอนต์ iphone และ android ดังนั้นฉันไม่คิดว่าคุณต้องการ B เครื่องด้วยคุณสามารถติดตั้งไคลเอ็นต์โทรเลขสำหรับระบบปฏิบัติการเฉพาะหากคุณต้องการ .. ความปลอดภัย? ข้อความโทรเลขมีการกำหนด .. หากใครต้องการ ddos ​​raspi ของคุณ? พวกเขาจะทำ dos เซิร์ฟเวอร์โทรเลขก่อน ..

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

ด้วยแนวคิดนี้คุณสามารถทำรีโมทได้ทุกที่ทุกเวลา ..


วัด ไม่ปลอดภัยคุณไว้ใจแอพส่งข้อความแบบสุ่มคุณกำลังบอกว่า OP ควรไปแก้ไขแอพส่งข้อความแบบสุ่มเพื่อให้มันใช้งานได้ สิ่งนี้ไม่ได้ตระหนักว่าแอพการส่งข้อความแบบสุ่มจะมีอะไรบางอย่างเช่นเสียงเรียกเข้าและมีความหน่วงแฝงที่น่ากลัว
ยังมีผู้ใช้อื่น

ถ้าคุณใช้มันแค่ส่งคำสั่งฉันคิดว่ามันโอเค .. ถ้าคุณใช้มันกับเสียงเรียกเข้าฉันไม่คิดว่ามันดีคำแนะนำดี .. ฉันจะแก้ไขคำตอบของฉัน
Wicaksono Trihatmaja

ฉันไม่คิดว่านี่คือสิ่งที่ฉันต้องการฉันต้องการเข้าถึงเชลล์อย่างเต็มที่ไม่น้อยไปกว่านั้น - เท่าที่ ddosing Pi .. ฉันไม่ได้กังวลอะไรเลยอย่างแรกเลยเพราะฉันต้องตั้งค่าพิเศษเพื่อ แม้จะเชื่อมต่อด้วยตัวเองอย่างที่สองเพราะการเชื่อมต่อจะไม่ต่อเนื่องและมีการเปลี่ยนแปลงแบบสุ่มอยู่ตลอด
user2813274

0

ฉันคิดว่าคุณควรดูที่การส่งต่อพอร์ตย้อนกลับ ssh โดยสรุปคุณเริ่มต้น ssh จาก A ถึง C โดยใช้ไวยากรณ์ด้านล่างจากนั้นใช้พอร์ตนั้นไปที่ช่องสัญญาณย้อนกลับจาก C ถึง A คุณจะไม่ตีไฟร์วอลล์ที่บ้านของ A เมื่อคุณทำเช่นนี้เพราะ R-Pi มี อุโมงค์

ssh -R 2210: localhost: 22 myCoolAwsSite.com

โปรดพิจารณาเรื่องความปลอดภัยเมื่อคุณทำเช่นนั้น คุณสามารถเพิ่มยิวยิตสู cron บางส่วนเพื่อให้การเชื่อมต่อที่สร้างขึ้นใหม่หลังจากรีบูต


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