เชื่อมต่อกับ Linux ด้วยชื่อแทนที่จะใช้ IP


18

ฉันยังใหม่กับ Linux (ปัจจุบันใช้ Ubuntu 10.04) และฉันเพิ่งตั้งค่าการเข้าถึง SSH ให้กับเครื่อง Linux ของฉัน ปัจจุบันฉันต้องใช้ssh root@x.x.x.xเพื่อเชื่อมต่อ แต่ค่อนข้างจะสามารถแลกเปลี่ยน IP สำหรับชื่อคอมพิวเตอร์ (เช่นใน Windows ด้วย\\name) หรือชื่อโดเมน (เช่นcomputername.example.com)

ฉันไม่รู้ว่าจะเริ่มจากตรงไหนดังนั้นความช่วยเหลือจะได้รับการชื่นชมมากที่สุด กรุณาไปช้าตามที่กล่าวไว้ - ฉันยังใหม่กับสิ่งนี้


แก้ไข 1

ลืมบอกไปอย่างสมบูรณ์ว่าฉันพยายามเชื่อมต่อจาก Windows 7 (ผ่าน PuTTY) - ขอโทษ


คุณพยายามเชื่อมต่อจากภายใน LAN ของคุณหรือจากที่ใดในโลก?
Karl Bielefeldt

6
นอกจากนี้ FYI ยังอนุญาตให้เชื่อมต่อผ่าน ssh เนื่องจากรูทนั้นถือว่าเป็นความคิดที่ไม่ปลอดภัย ขอแนะนำให้ลงชื่อเข้าใช้ด้วยชื่อผู้ใช้ปกติและใช้ su หรือ sudo จากที่นั่น
Karl Bielefeldt

ทั้ง LAN ของฉันและโลก (แม้ว่าฉันคิดว่าฉันรู้วิธีตั้งค่าการเข้าถึงโลกดังนั้นคำถามนี้มีไว้สำหรับ LAN) - และ root @ เป็นตัวอย่างมากกว่าสิ่งใด - ฉันใช้ผู้ใช้จริง
Ryall

คำตอบที่ดีมากมาย - ขอบคุณทุกคน - แม้ว่าฉันจะต้องเลือกอย่างใดอย่างหนึ่งดังนั้นฉันจึงเลือกรายละเอียดมากที่สุด
Ryall

คำตอบ:


36

โปรโตคอลการค้นพบ LAN ที่ไม่มีการกำหนดค่าตามลำดับที่ต้องการ:

  • mDNS
    • ใช้เป็นหลักโดยผลิตภัณฑ์ Apple และโปรแกรม Linux บางตัว แต่ยังสามารถใช้ได้กับ Windows และแพลตฟอร์มอื่น ๆ ใช้ IP multicast
    • จัดเตรียมทั้งการค้นหาชื่อและการค้นหาบริการ
    • ชื่อโฮสต์จะอยู่ในรูปแบบname.localเสมอ
    • ซอฟต์แวร์:
      • ได้รับการสนับสนุนใน Windows 10.1709 ขึ้นไป (ต้องเปิดใช้งานผ่าน Registry);
      • Bonjourบน Windows รุ่นเก่า;
      • Avahiกับnss_mdnsบน Linux;
      • ได้รับการสนับสนุนบน OS X และ iOS (และสมมุติว่า Android)
  • LLMNR
    • ใช้สำหรับการจำแนกชื่อโดย Windows Vista ขึ้นไปเป็นทางเลือกที่ทันสมัยสำหรับบริการชื่อ NetBIOS
    • คล้ายกับ mDNS มาก แต่มีคุณสมบัติน้อยลงโดยเฉพาะขาดการค้นพบบริการ (Windows ใช้โปรโตคอล WS-Discovery สำหรับสิ่งนั้น)
    • ใช้ชื่อโฮสต์เปล่า (เช่น NBNS แต่ต่างจาก mDNS)
    • ซอฟต์แวร์:
      • รองรับ Windows Vista และใหม่กว่า;
      • systemd-resolvedด้วยnss_resolve(ส่วนหนึ่งของ systemd 216) บน Linux .
  • บริการชื่อ NetBIOS
    • ส่วนหนึ่งของชุดโปรโตคอลเครือข่าย NetBIOS เก่าที่ใช้โดย Windows, OS / 2, MS-DOS ... ยังคงใช้งานอยู่ ไม่ใช่ข้อแก้ตัวที่จะเริ่มใช้กับเครือข่ายใหม่
    • ให้การแก้ปัญหาชื่อและค้นหาบริการ (หรือที่รู้จักในนาม "Network Neighborhood" หรือ "My Network Places" ใน Windows
    • ใช้การออกอากาศ IPv4 (ค่อนข้างช่างพูด) และมีโพรโทคอล "การเลือกตั้งเบราว์เซอร์" ที่ซับซ้อนและโง่เง่าของตนเองเพื่อลดความเป็นแชท ไม่รองรับ IPv6 เลย
    • ซอฟต์แวร์:
      • ได้รับการสนับสนุนบน Windows และ OS / 2;
      • nmbdกับnss_wins(ส่วนหนึ่งของSamba ) บน Linux และ BSD's;
      • เห็นได้ชัดว่า OS X รองรับด้วยเช่นกันหรือไม่?

วิธีการที่มักกำหนดค่าไว้ล่วงหน้าสำหรับคุณ:

  • DNSใช้ชื่อโดเมนภายใน (ภายใน)
    • เกตเวย์ภายในบ้านมักจะมีบิวท์อินนี้ซึ่งเป็นส่วนหนึ่งของแคช DNS ในเครื่อง บ่อยครั้งที่มันเป็นเรื่องปกติdnsmasqที่คุณสามารถเรียกใช้ด้วยตนเองหากคุณตั้งค่าเกตเวย์ที่ใช้ Linux / BSD
    • พวกเขาใช้ชื่อโฮสต์จากคำขอ DHCP ของคุณลงทะเบียนภายในdnsmasqภายใต้โดเมนที่ต้องการhomeและเสนอตัวเองเป็นเซิร์ฟเวอร์ DNS หลัก (ทำหน้าที่เป็นแคช DNS)
    • ทำงานได้ตามค่าเริ่มต้นกับระบบปฏิบัติการส่วนใหญ่ แต่ใช้กับ DHCP เท่านั้น (เกตเวย์ไม่รู้จักชื่อโฮสต์ของโฮสต์คงที่ IP) และโดยทั่วไปมีแนวโน้มที่จะมีข้อบกพร่องในประสบการณ์ของฉัน
    • ซอฟต์แวร์:
      • ไคลเอ็นต์ DHCP ปกติบนโฮสต์ ต้องส่งตัวเลือกชื่อโฮสต์
      • dnsmasqบนเกตเวย์ (การตั้งค่าขนาดใหญ่สามารถใช้dhcpd+ named.)

วิธีการที่เกี่ยวข้องกับการกำหนดค่าด้วยตนเอง:

  • DNSใช้ชื่อโดเมนของคุณเอง
    • ทำงานได้ทุกที่ (จะไม่ช่วยให้คุณเชื่อมต่ออินเทอร์เน็ตจริง ๆ)
    • DNS แบบไดนามิกเป็นไปได้ถ้าคุณใช้ DHCP และควบคุมเซิร์ฟเวอร์ DNS มิฉะนั้นข้อมูลทั้งหมดจะคงที่
    • จำเป็นต้องมีชื่อโดเมน (ซึ่งจะมีค่าใช้จ่ายไม่กี่ bucks)
  • ฟรีโดเมนย่อย DNS
    • ยังคง DNS เพียงฟรี (หรือถูกกว่าโดเมนมาก) แต่ก็ค่อนข้าง จำกัด บริการต่างๆเช่นFreeDNSและDynเสนอการลงทะเบียนของแต่ละโดเมนย่อยภายใต้โดเมนที่ควบคุม (ตัวอย่างmyhost.dyndns.com)
      • บ่อยครั้งที่บุคคลอื่นถูกเลือกโดยโดเมนย่อย ...
    • อนุญาตให้อัพเดท Dynamic DNS ได้ (สไตล์ DynDNS)
  • /etc/hosts
    • ไฟล์ข้อความที่แสดงที่อยู่ IP - คู่ชื่อโฮสต์ซึ่งจะต้องกำหนดค่าด้วยตนเองในเครื่องไคลเอ็นต์แต่ละเครื่อง
    • ( %SystemRoot%\system32\drivers\etc\hostsบน Windows)
  • การกำหนดค่า SSH
    • ฟิลด์ "ชื่อโฮสต์" ใน PuTTY หรือ~/.ssh/configบน OpenSSH
    • ต้องกำหนดค่าด้วยตนเอง
  • PostIt บันทึกทั่วโต๊ะของคุณ
    • ถูกมาก. ไม่มีนโยบายการตั้งชื่อ ชนิดข้อมูลที่ไม่มีที่สิ้นสุด
    • ค่อนข้างไม่น่าเชื่อถือ ต้องแจกจ่ายด้วยตนเอง ไม่มี TTL ซึ่งมักส่งผลให้ข้อมูลเก่าถูกแคชนานหลายเดือนจนกระทั่งมีคนสังเกตเห็น อัลกอริทึมการสืบค้นไม่มีประสิทธิภาพ การตอบสนองต่อการค้นหามีแนวโน้มที่จะหายไปได้ง่ายบางครั้งเหลือเพียงบันทึกกาวบนจอภาพของคุณ (สามเดือนต่อมาคุณอาจพบพวกมันบัฟเฟอร์อยู่ด้านหลังโต๊ะ)

7
ฮ่าฮ่าฉันชอบตัวเลือกของ PostIt :) :)
Ryall

1
+1 สำหรับ mDNS / Avahi Avahi ถูกติดตั้งตามค่าเริ่มต้นในหลาย ๆ distros แต่อาจเป็นการติดตั้งแพ็คเกจสำหรับคุณ
Broam

1
ใน Debian คุณจะต้องติดตั้ง Avahi ด้วยตนเอง
Martin Ueding

2
@grawity คำตอบที่ดี สิ่งหนึ่งที่ควรปรับปรุง: ระลึกไว้เสมอว่า Local DNS / DHCP นั้นทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องมีโดเมนที่ลงทะเบียน เพียงแค่โยน Raspberry PI ที่อยู่ใต้โต๊ะของคุณและตั้งค่าเซิร์ฟเวอร์ขนาดเล็กด้วยเช่น dnsmasq
Paradoxon

1
@paradoxon: ขอบคุณฉันลืมพูดถึงว่า (เกตเวย์บ้านส่วนใหญ่รัน dnsmasq หรืออะไรที่คล้ายกัน แต่ crappier.)
1686

4

สองตัวเลือก

  • บริการทั้งหมด:

/etc/hostsใส่รายการสำหรับมันใน อย่าแตะที่บรรทัดที่มีอยู่เพิ่มบรรทัดใหม่

  • ssh เท่านั้น:

เพิ่มHoststanza ~/.ssh/configเป็นชื่อที่คุณต้องการใช้แล้วเพิ่มตัวเลือกที่ต้องการด้านล่าง ดูman 5 ssh_configรายละเอียดเพิ่มเติมได้ที่

Host myserver
    Hostname 192.168.123.234
    Protocol 2

4

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


1
เพียงชี้แจงที่อยู่ IP ของคอมพิวเตอร์อาจยังคงเปลี่ยนแปลง (ขึ้นอยู่กับวิธีที่ ISP ของคุณจัดการกับสิ่งนั้น) แต่คุณไม่ต้องกังวลเกี่ยวกับเรื่องนี้เนื่องจากบริการ DNS แบบไดนามิกให้ชื่อโดเมนที่แมปกับสิ่งที่ปัจจุบัน ที่อยู่ IP ของคอมพิวเตอร์คือ
David Z

4

จาก Windows 7 (ต่อการแก้ไขของคุณ) ...

Start -> Run -> notepad c:\windows\system32\drivers\etc\hosts

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

x.x.x.x    mylinuxhostname mylinuxhostname.domain.com

บันทึกไฟล์จากนั้นลองกระตุกไฟล์จากพรอมต์คำสั่ง:

c:\> ping mylinuxhostname
c:\> ping mylinuxhostname.domain.com

สิ่งนี้จะทำงานได้จาก LAN ของคุณเท่านั้น การเชื่อมต่อจาก "โลก" (ต่อความคิดเห็นของคุณเพิ่ม) เป็นสัตว์ที่แตกต่างอย่างสิ้นเชิงที่เกี่ยวข้องกับ DNS (dyndns, godaddy, etc) และการกำหนดค่าเราเตอร์เช่น (NAT) ที่อยู่เครือข่ายการแปล et al


2

คุณจะต้องการตรวจสอบ Samba หรือ Winbind เครือข่าย all-Linux ของฉัน (รวมถึงเราเตอร์) สามารถพูดคุยกันด้วยชื่อโฮสต์ แต่ฉันไม่แน่ใจว่าจะบอก Windows ได้อย่างไรชื่อของเครื่อง Linux คืออะไร


1
เครือข่ายของฉันทำสิ่งนี้เพราะ Avahi (ระบบเครือข่าย Zeroconf) ฉันไม่ทราบศักยภาพของ Zeroconf client / server บน Windows
Broam

1

ฉันยังใช้ Ubuntu 10.04 และฉันสามารถเชื่อมต่อกับเครื่องของฉันโดยใช้ชื่อได้ ว่าฉันมีคอมพิวเตอร์ชื่อ ernie และ bert ที่อยู่ในเครือข่ายเดียวกัน:

ข้อความแจ้งของฉันมีลักษณะเช่นนี้ใน ernie:

ernie:~$ 

ถ้าฉันพิมพ์สิ่งนี้:

ernie:~$ ssh root@bert.local

ฉันจะรูตกับเบอร์ท:

bert:~#

ฉันทำสิ่งนี้ระหว่างเครื่องอูบุนตูสองเครื่อง แต่ฉันเดาว่ามันจะใช้งานได้ในฉาบเหมือนกัน (ฉันไม่รู้เกี่ยวกับการเชื่อมต่อ windows จาก Ubuntu ดูคำตอบอื่น ๆ เกี่ยวกับ samba)

คุณต้องติดตั้ง sshd ใน Ubuntu เพื่อให้สิ่งนี้ทำงาน: sudo apt-get install openssh-server


1
นี่เป็นเพราะ Avahi, Zeroconf daemon ที่ติดตั้งโดยค่าเริ่มต้น มันจะไม่ช่วยให้เขาบน Windows เว้นแต่เขามีลูกค้าเนื่องจากเหตุผลอื่น ๆ (อาจจะติดตั้ง iTunes หนึ่งที่ผมไม่สามารถพูดได้?.)
Broam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.