จะเชื่อมต่อกับเครื่อง linux ที่เปลี่ยน IP เป็นประจำได้อย่างไร


12

ปัญหาของฉันคือการหาวิธีที่จะ SSH เป็นเซิร์ฟเวอร์ Linux (Ubuntu 18.04) ซึ่งมีการเปลี่ยนแปลงที่อยู่ IP ทุกวัน

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

ฉันสามารถตั้งค่า SSH และใช้งานได้ทั้งในและนอก ... จนกว่าการเปลี่ยนแปลงที่อยู่ IP หลังจากนั้นฉันก็ไม่สามารถเชื่อมต่อจากระยะไกลได้แม้จะใช้ที่อยู่ IP ใหม่

  • ฉันจำเป็นต้องเริ่มบริการ SSH ใหม่ทุกครั้งที่มีการเปลี่ยนแปลงที่อยู่ IP หรือไม่
  • ถ้าเป็นเช่นนั้นทำไม
  • ฉันต้องดำเนินการอื่นอีกหรือไม่เมื่อมีการเปลี่ยนแปลงที่อยู่ IP เพื่อให้สามารถเข้าถึง SSH ได้หรือไม่

UPDATE

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

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

คนส่วนใหญ่คิดว่า SSH ควรทำงานตราบใดที่เรารู้ IP ใหม่ดังนั้นนี่เป็นสิ่งที่ไม่ซ้ำกับ 18.04 หรือไม่? ฉันติดตั้งเซิร์ฟเวอร์นี้ให้กับลูกค้าเมื่อเร็ว ๆ นี้ดังนั้นการตั้งค่าทั้งหมดยังคงเป็นค่าเริ่มต้น (ผู้ไม่รู้จะเปลี่ยนแปลงอย่างไร)



12
ตะโกนที่ ISP ของพวกเขา การเปลี่ยนที่อยู่ IP วันละครั้งนั้นไร้สาระสำหรับการเชื่อมต่อทางธุรกิจและอาจไม่เคยได้ยินถึงการเชื่อมต่อที่อยู่อาศัย
Michael Hampton

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

1
อาจมีความแปลกประหลาดเกิดขึ้นเช่นการเรียกใช้ DDNS และบางอย่างเช่นListenAddress <dynamic host name>ในไฟล์กำหนดค่า sshd อาจเป็นเพราะบางคนไม่ต้องการให้ผู้ใช้ภายในสามารถเข้าใช้งานเซิร์ฟเวอร์ได้ สิ่งนี้จะต้องเริ่มต้นเซิร์ฟเวอร์ ssh ใหม่ทุกครั้งที่มีการเปลี่ยนแปลง IP
Guntram Blohm สนับสนุน Monica

1
@MichaelHampton: การตะโกนอาจไม่ช่วยให้จ่ายได้ ด้วยการขาดแคลนที่อยู่ IPv4 ในปัจจุบันผู้ให้บริการส่วนใหญ่คิดค่าใช้จ่ายเพิ่มเติมสำหรับที่อยู่ IPv4 แบบคงที่ (บางคนคิดค่าใช้จ่ายเพิ่มเติมสำหรับที่อยู่ IP สาธารณะแบบไม่คงที่มิฉะนั้นคุณจะได้รับDual Stack Lite ) แน่นอนถ้า OP อยู่บน IPv6 สิ่งที่เปลี่ยนแปลง ...
sleske

คำตอบ:


21

คำตอบอื่น ๆ ดูเหมือนจะมองข้ามสิ่งเดียวในคำถามของคุณ:

หลังจากนั้นฉันก็ไม่สามารถเชื่อมต่อจากระยะไกลได้แม้จะใช้ที่อยู่ IP ใหม่

DDNS จะช่วยคุณค้นหาที่อยู่ IP ใหม่ แต่นั่นไม่ใช่ปัญหาที่นี่

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

สิ่งที่ฉันสามารถจินตนาการได้คือเซิร์ฟเวอร์ไม่ได้อยู่หลังเราเตอร์และทำการเชื่อมต่อ PPPoE ของตนเองและ a) เซิร์ฟเวอร์ ssh เชื่อมโยงกับที่อยู่อินเตอร์เฟสเฉพาะ ณ จุดรีสตาร์ทเซิร์ฟเวอร์ b) ไฟร์วอลล์บนเครื่องที่อนุญาตให้ ssh ที่เข้ามา เพียง IP ของเซิร์ฟเวอร์ที่มีไฟร์วอลล์ไม่ได้อัปเดตเมื่อ IP เปลี่ยนแปลง

netstat -nta | grep -w 22 | grep LISTENในการตรวจสอบกรณีแรกที่ทำ ถ้ามันบอกว่า 0.0.0.0:22 ก็ไม่เป็นไร ถ้ามันจะแสดงรายการเฉพาะ IP แล้วตรวจสอบไฟล์ config sshd (ที่/etc/sshd.conf) ListenAddressสำหรับ

ในการตรวจสอบกรณีที่สองให้ทำiptables -L -nและตรวจสอบว่าหนึ่งในกฎในINCOMINGห่วงโซ่ตรงกับ IP ของเซิร์ฟเวอร์และพอร์ต 22 ของคุณ

หากหนึ่งในนั้นมีที่อยู่เซิร์ฟเวอร์ปัจจุบันคุณจะต้องเปลี่ยนเป็น 0.0.0.0 (ตรวจสอบให้แน่ใจว่าคุณทราบเกี่ยวกับผลกระทบด้านความปลอดภัย) หรืออัปเดตกฎ / การกำหนดค่าเมื่อใดก็ตามที่ IP เปลี่ยน

แก้ไข

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

การส่งต่อพอร์ตนี้ไม่ควรหยุดชะงักเมื่อการเปลี่ยนแปลง IP ภายนอก (การเชื่อมต่อ ssh ที่มีอยู่จะลดลง) แต่อาจเป็นกฎที่ไม่ได้ติดตั้งโดยคุณ แต่ด้วย UPNP เวทมนต์โดยเราเตอร์จะปล่อย UPNP ส่งต่อเมื่อได้รับ ที่อยู่ใหม่และ sshd เรียกใช้กฎเมื่อรีสตาร์ทเท่านั้น คุณได้ตั้งค่าตัวส่งต่อพอร์ตภายในเราเตอร์ด้วยตัวเองหรือไม่

หรือเป็นIP ภายในของเซิร์ฟเวอร์ที่มีการเปลี่ยนแปลง - ในกรณีนี้มีบางสิ่งที่เสียหายอย่างรุนแรงกับ DHCP ของคุณ มอบที่อยู่ภายในที่แน่นอนให้กับเซิร์ฟเวอร์ของคุณ

หรือคุณกำลังใช้ IPV6 มีการกำหนดค่าบางอย่างที่อุปกรณ์เปลี่ยน IP เพื่อให้ติดตามได้ง่ายขึ้น ดูตัวอย่างเช่นhttps://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/แต่ในกรณีนี้ให้อัปยศคุณ พูดถึงมันในโพสต์ต้นฉบับของคุณ นี่อาจหมายความว่าเราเตอร์ของคุณไม่ได้ทำ NAT เลยและความคิดดั้งเดิมของฉันยังคงใช้ได้แม้อยู่หลังเราเตอร์


2
+1 สำหรับการเป็นคำตอบแรกในการตอบคำถามที่ถาม
kasperd

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

11

Dynamic DNS เป็นตัวเลือกหนึ่งอีกตัวเลือกหนึ่งคือมีเมลเซิร์ฟเวอร์หรือส่งเป็น IP การเรียก HTTP แบบง่ายจะทำ (ไปยังปลายทางที่คุณควบคุมและเข้าสู่ระบบคำขอ)

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

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


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

7

คุณควรตรวจสอบบริการ ddns จริงๆ เท่าที่ระยะไกลสามารถเชื่อมต่อกับเครื่องบางอย่างด้วยที่อยู่ IP แบบไดนามิก; ddns เป็นทางออกที่ใช้กันมากที่สุด

ตรงไปที่https://noip.comและสมัครใช้งานบัญชี (มันคือ errr ... ที่คาดคะเนได้. .. คอฟ .. .. ฟรีสำหรับเครื่อง 1-3 เครื่องที่ทำงานบนเครือข่ายเดียวกัน (ถ้าฉันไม่เข้าใจผิดอย่าอ้าง ฉันที่นี่: นานแล้วที่ ive เชื่อใจได้กับบริการ 'ฟรี' เหล่านี้ ... ) นอกจากนี้ยังมีทางเลือกอื่น ๆ เช่น Afraid DNS ( https://freedns.afraid.org/ และถึงแม้จะเป็น Open DNS ของ Cisco ก็ยังสามารถใช้งานได้ (โดยที่นี่ไม่ใช่คุณเพียงลูกค้าฉันขอแนะนำให้คุณลงทะเบียนสำหรับการทดลองใช้บัญชีร่มใช้สำหรับการหมุนและสมัครใช้งานจริงในภายหลัง จัดการ >>> พวกเขามีหนึ่งในนั้นส่วนขยายที่สามารถดาวน์โหลดได้เหมือน GUI ซึ่งจะต่ออายุชื่อโฮสต์ ddns โดยอัตโนมัติเมื่อใดก็ตามที่ลูกค้าของคุณเปลี่ยน ip จริง ๆ แล้วเป็นวิธีที่เข้าใจง่ายที่สุดและไม่ใช่เทคโนโลยีที่ฉันรู้ [แค่เพียงใน กรณีที่คุณต้องเรียกลูกค้าของคุณและขอให้ดาวน์โหลด GUI แทน .... ])


3
แม้ว่าสิ่งนี้จะเป็นประโยชน์สำหรับการเข้าถึงโฮสต์ในการเปลี่ยนที่อยู่ IP แต่นั่นไม่ใช่คำถามที่ถาม คำถามคือสาเหตุที่เซิร์ฟเวอร์ ssh หยุดตอบสนองเมื่อมีการเปลี่ยนแปลงที่อยู่ IP และวิธีการแก้ไข บริการ DNS แบบไดนามิกไม่ได้ระบุว่า
kasperd

4

ฉันสามารถตั้งค่า SSH และใช้งานได้ทั้งในและนอก ... จนกว่าการเปลี่ยนแปลงที่อยู่ IP หลังจากนั้นฉันก็ไม่สามารถเชื่อมต่อจากระยะไกลได้แม้จะใช้ที่อยู่ IP ใหม่

บางครั้งอาจต้องใช้เวลาสักครู่ก่อนที่การเปลี่ยนแปลง DHCP จะมีผล ลองรีไซเคิลไคลเอ็นต์ DHCP บนเครื่องเป้าหมาย

$> sudo dhclient -r
$> sudo dhclient
Do I need to restart the service every time the IP address changes?
If so, why?

ไม่ได้คุณจำเป็นต้องรีไซเคิลบริการ ssh ของคุณเมื่อการเปลี่ยนแปลงการกำหนดค่า ( /etc/ssh/sshd_conf)

ฉันต้องดำเนินการอื่นอีกหรือไม่เมื่อมีการเปลี่ยนแปลงที่อยู่ IP เพื่อให้สามารถเข้าถึง SSH ได้หรือไม่

เลขที่

ฉันมีทางออกที่ถือว่าคุณได้ตั้งค่า sendmail ไว้ในเครื่องเป้าหมายของคุณ

สคริปต์นี้ส่งอีเมลที่แสดงที่อยู่ IP ที่โลกคิดว่าเรามี (ขอบคุณ ipify.org) อีเมลจะมีที่อยู่ IP ล่าสุดเสมอ

  1. สร้าง dhcp-alert bash script (ไม่มีนามสกุล. sh)
  2. ใส่สคริปต์ใน /etc/dhcp/dhclient-exit-hooks.d

    #!/bin/sh
    case "$reason" in (BOUND|RENEW|REBIND|REBOOT)
    (
       echo To: me@my.email
       echo From: me@my.email
       echo "Content-Type: text/html; "
       echo Subject: DHCP reason: $reason
       echo
       echo Your IP address is: `curl -s https://api.ipify.org`
    ) | sendmail -t
    ;;
    esac
    

หากวิธีนี้ใช้ไม่ได้คุณสามารถตั้งค่า cron เพื่อส่งที่อยู่ IP ปัจจุบันให้คุณได้

#!/bin/sh
(
   echo To: me@my.email
   echo From: me@my.email
   echo "Content-Type: text/html; "
   echo Subject: IP address change
   echo
   echo Your IP address is: `curl -s https://api.ipify.org`
) | sendmail -t

ฉันเพิ่งจะแนะนำสิ่งนี้มันเป็นความคิดที่ดีและสิ่งแรกที่นึกถึงเมื่อฉันอ่านคำถาม นอกจากนี้หากคุณมีปัญหาเกี่ยวกับapi.ipify.org (มันถูกบล็อกในเครือข่ายโรงเรียนของฉันด้วยเหตุผลบางอย่าง) คุณสามารถใช้เว็บไซต์อื่นที่ฉันทำเมื่อสองสามเดือนก่อนหน้านี้ซึ่งทำสิ่งเดียวกัน: findip.win
เลิกทำ

@karlchilders ขอบคุณสำหรับคำตอบ! ฉันมีสคริปต์ cron ที่รายงานที่อยู่ ip ให้ฉัน แต่ฉันไม่รู้เกี่ยวกับตะขอ dhclient มันยอดเยี่ยมมาก! ฉันค่อนข้างจะมีเพียง IP รายงานเมื่อมีการเปลี่ยนแปลงจริง คำถาม: หากสคริปต์นี้สามารถทำงานและรายงานที่อยู่ IP เหตุใดการรีไซเคิล dhclient จึงมีผลต่อการเข้าถึง SSH
Richard

@karlchilders หรือสคริปต์นี้จะทำงานเฉพาะเมื่อคุณรีไซเคิล dhclient ด้วยตนเอง?
ริชาร์ด

dhclient -r; dhclient จะต่ออายุสัญญาเช่า DHCP เพื่อให้โฮสต์ของคุณเป็นปัจจุบัน hooks จะทำงานได้ตลอดเวลาที่มีเหตุการณ์ dhcp เกิดขึ้นด้วยตนเองหรืออย่างอื่น
karlchilders

@Richard กรุณาทำเครื่องหมายคำตอบข้อใดข้อหนึ่งเป็นคำตอบที่ต้องการ ขอขอบคุณ.
karlchilders

3

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


ที่อยู่ IP ที่ฉันดึงลงมานั้นเป็น IPv6 จริง ๆ ทุกครั้ง
ริชาร์ด

1
@Richard: ขออภัยที่ได้ยินว่ามันไม่เหมาะกับคุณ ฉันจะทิ้งคำตอบสำหรับคนอื่นที่มีปัญหานี้กับ IPv4
MSalters

@Richard คุณควรพูดถึงคำถามของคุณว่าคุณกำลังเผชิญกับ IPv6 ทำให้ปัญหาแตกต่างกันมาก
Dubu

1
@Dubu แน่นอนมันทำให้ปัญหาแตกต่างกัน ปัญหาแบบนี้ไม่ควรเกิดขึ้นกับ IPv6 ซึ่งอาจเป็นสาเหตุที่ทุกคนคิดว่าเป็น IPv4 แต่ในความเป็นจริงคุณอาจได้รับบางอย่างของอาการที่อธิบายไว้ถ้าคุณใช้ที่อยู่ความเป็นส่วนตัวมากกว่าที่อยู่คงที่ หากตัวอย่างเช่นคุณถามเว็บไซต์ว่าที่อยู่ IP ของคุณคืออะไรมันจะแสดงที่อยู่ส่วนบุคคลของคุณมากกว่าที่อยู่คงที่ของคุณ และการใช้สิ่งนั้นสำหรับการเชื่อมต่อ ssh ไม่ใช่ความคิดที่ดี ยังไม่ได้อธิบายว่าทำไมจึงไม่ทำงานจนกว่าเซิร์ฟเวอร์ ssh จะรีสตาร์ท
kasperd

1
@Dubu: นั่นเป็นวิธีที่ไม่ได้มาตรฐาน DHCPv6-PD (Prefix Delegation) ร่วมกับ DHCP Unique ID (DUID) ควรป้องกันไม่ให้
MSalters

1

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

สคริปต์นี้ใช้งานบนเครื่องของฉันนับ แต่นั้นมา: // อธิบายตนเองได้ดีมาก //

import smtplib
from requests import get
import time

user = 'exampleemail@gmail.com'
psd = 'examplepassword'
msg = 'Hey, your ip has changed! Use this one from now on: '
currip = '0.0.0.0' # It'll send an email the first time you execute this aswell
while True:
    newip = get('https://api.ipify.org').text
    if currip == newip:
        print("nonewip")
        #You can just comment the line above this one if you want to
    else:
        tmpmsg = "\n"+msg + newip +" The old one used to be: "+currip
        currip = newip
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.connect('smtp.gmail.com')
        server.ehlo()
        server.starttls()
        server.ehlo()
        server.login(user,psd)
        #You can change the second parameter, use ('from','to','message')
        server.sendmail(user, user, tmpmsg)

        server.quit()
        with open('/home/pi/DEV/iphistory.txt', 'a') as f:
            f.write('newip: '+currip+'\n')
            f.close()
        print('New IP Found: '+tmpmsg)
    time.sleep(7200)

Python 3.x ทำงานได้อย่างไร้ที่ติบางทีอาจไม่ใช่ทางออกที่ดีที่สุด แต่ใช้งานได้

คุณจะได้รับอีเมลในกล่องจดหมายเข้าของคุณทุกครั้งที่การเปลี่ยนแปลง IP สาธารณะของเครื่อง

ตอนนี้เกี่ยวกับคำถามของคุณ:

ฉันต้องรีสตาร์ทบริการทุกครั้งที่มีการเปลี่ยนแปลงที่อยู่ IP หรือไม่ หากการรีสตาร์ทบริการหมายความว่าคุณสร้างการเชื่อมต่อ ssh อีกครั้งใช่

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

ฉันต้องดำเนินการอื่นอีกหรือไม่เมื่อมีการเปลี่ยนแปลงที่อยู่ IP เพื่อให้สามารถเข้าถึง SSH ได้หรือไม่ เพียงแค่ SSH ไปยังที่อยู่ใหม่

ไชโย! JSR


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

คุณแน่ใจหรือไม่ว่าคุณได้รับที่อยู่ที่ถูกต้อง? ถ้าเป็นเช่นนั้นลอง ping ที่มันเมื่อคุณได้รับ IP ฉันไม่เคยเห็นปัญหานั้นมาก่อนนอกจากนี้ในกรณีที่คุณไม่ทราบคุณสามารถเรียกใช้สคริปต์บนพื้นหลังด้วย "python3 scriptname.py &" นอกจากนี้ตรวจสอบพอร์ตที่ส่งต่อของเราเตอร์ฉันคิดว่า IP ท้องถิ่นไม่ ไม่เปลี่ยน แต่ก็ยังคุ้มค่าที่จะตรวจสอบ
Jaime Satorres Rey

ใช่ IP นั้นถูกต้อง หากฉันรีสตาร์ทบริการ SSH บนเครื่องเป้าหมายฉันสามารถเชื่อมต่อได้อีกครั้ง แต่ฉันไม่เข้าใจว่าทำไมถึงเป็นเช่นนั้น
Richard

@Richard ปัญหานี่คือเนื่องจาก IP ของคุณเปลี่ยนแปลงโฮสต์ของคุณหยุดทุกการเชื่อมต่อเนื่องจากคีย์ RSA ที่คุณใช้เพื่อตรวจสอบสิทธิ์ไม่ตรงกับที่ขอ ฉันไม่ได้เป็นผู้เชี่ยวชาญในหัวข้อนี้ดังนั้นอย่าใช้คำพูดของฉันเป็นความจริง ... แต่สถานการณ์ของคุณเป็นเช่นนั้นน่าจะเป็นเพราะสิ่งที่ฉันพูดไป
Jaime Satorres Rey

1

มันคุ้มค่าที่จะดูสิ่งนี้จากอีกด้านหนึ่ง: โดยปกติแล้วมันง่ายกว่ามากในการสร้างการเชื่อมต่อภายนอกจากเครื่องที่ต้องการความสนใจของคุณ (DNS, NAT และการตั้งค่าไฟร์วอลล์อื่น ๆ ไม่สำคัญเลยหรือง่ายกว่า)

Rคุณสามารถใช้นี้เพื่อสร้างกระสุนและแก้ปัญหาที่ง่ายที่จะได้เป็นเครื่องระยะไกล ข้อกำหนดเพียงอย่างเดียวคือคุณสามารถให้การsshเข้าถึงสาธารณะแก่หนึ่งในเครื่องท้องถิ่นของคุณเอง (ลองเรียกมันว่าS) จากนั้นดำเนินการดังนี้:

  1. สร้างออกไปด้านนอกsshการเชื่อมต่อจากRไปS, การสร้างอุโมงค์กลับย้อนกลับเป็นR :

    ssh -L 22:<address-of-S>:22000

  2. เปิดSใช้อุโมงค์ย้อนกลับเพื่อsshเข้าไปในเครื่องระยะไกลR:

    ssh -p 22000 127.0.0.1

ขั้นตอนที่ 1 สามารถเรียกใช้งานได้ด้วยตนเองและตามต้องการจากด้านระยะไกลเมื่อต้องการความช่วยเหลือ หรือคุณสามารถสร้างบริการRที่จะรักษาอุโมงค์ย้อนกลับอย่างต่อSเนื่อง

ฉันใช้การตั้งค่าดังกล่าวเพื่อเข้าสู่ระบบระยะไกล (มือถือ) ที่อยู่หลังไฟร์วอลล์ / NAT และไม่มีรายการ DNS เลย


1

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

หากคุณต้องการโดยเฉพาะssh(พูดว่าคุณต้องมีการส่งต่อ X11 หรืออะไรบางอย่าง) ฉันขอแนะนำให้ตั้งค่า VPN (เช่น OpenVPN) โดยเฉพาะอย่างยิ่งบน UDP โดยมีการรักษาระยะสั้น การเชื่อมต่อ TCP (เช่น ssh ของคุณ) ผ่าน VPN จะรักษาและคงการเชื่อมต่อหลังจากเปลี่ยน IP แล้วจะใช้เวลานานขึ้น (ประมาณหนึ่งนาทีหรือมากกว่านั้น) แต่คุณสามารถเล่นกับ/proc/sys/net/ipv4/tcp_*รายการต่างๆเพื่อให้ยอมรับได้มากขึ้น

แก้ไข:

  • mosh ต้องการsshการรับรองความถูกต้อง แต่เมื่อผ่านการรับรองความถูกต้องแล้วการเชื่อมต่อจะยังคงอยู่จนกว่าคุณจะออกจากระบบ (หรือรีบูต) และคุณสามารถตรวจสอบความล้มเหลวsshในยามว่างได้ (เช่น strace -f -p pid_of_sshd )
  • มันเป็นไปได้ที่จะใช้moshโดยไม่ต้องsshตอบดัดแปลงจากที่นี่ :

เมื่อเซิร์ฟเวอร์ทำงาน:

mosh-server new -p $randomport -- $shellprogram

คุณได้รับผลลัพธ์เช่น QzdRHbAWzL7eRobi75DCrz

เมื่อลูกค้ารัน:

MOSH_KEY=QzdRHbAWzL7eRobi75DCrz mosh-client $serverip $radomport

โปรดทราบว่า$serveripจะต้องมี ip ไม่มีการแก้ปัญหาชื่อโฮสต์

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

  • หากมีปัญหาจริงๆให้sshติดตั้งinetdและเรียกใช้ ssh จากตรงนั้นไม่ใช่ daemon แบบสแตนด์อโลนเช่นโดยบรรทัดการกำหนดค่านี้สำหรับ "classic" inetd.conf สิ่งนี้จะเรียกใช้ daemon ใหม่ทุกครั้งที่คุณลงชื่อเข้าใช้ (โปรดทราบว่าไม่ใช่ทั้งหมด inetd forks จัดการ ipv6):

ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i


1
ขอบคุณสำหรับคำตอบ @Radovan! Mosh ดูน่าสนใจ แต่ดูเหมือนว่าจะใช้ SSH เพื่อตรวจสอบสิทธิ์ ดังนั้นรากของปัญหาของฉันจะยังคงอยู่ใช่ไหม? แจ้งให้เราทราบหากฉันเข้าใจผิดเอกสาร
ริชาร์ด

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