ข้อความแสดงข้อผิดพลาด“ sudo: ไม่สามารถแก้ไขโฮสต์ (ไม่มี)”


737

เมื่อฉันเรียกใช้sudoเทอร์มินัลติดอยู่สองสามวินาทีจากนั้นส่งออกข้อความแสดงข้อผิดพลาด เทอร์มินัลของฉันมีลักษณะเช่นนี้:

ubuntu@(none):~$ sudo true
sudo: unable to resolve host (none)

ฉันจะทำอย่างไรเพื่อแก้ปัญหา?


2
กรุณาโพสต์เนื้อหาของและ/etc/hostname /etc/hosts
จัดการ

48
ผมขอแนะนำให้กับปิดคำถามนี้เป็นภาษาท้องถิ่นมากเกินไป มีผู้ใช้หลายคนที่อาจคิดผิดว่าพวกเขาใส่ชื่อไว้ในhostsไฟล์ของพวกเขาแต่ใส่ชื่อที่แตกต่างแทนโดยเฉพาะอย่างยิ่งในเครือข่ายหลาย ๆ เครื่องคอมพิวเตอร์มีชื่อคล้ายกัน คำถามนี้ (และคำตอบ) จะปรากฏขึ้นเมื่อมีคนค้นหาปัญหานั้นและคำตอบจะแจ้งให้พวกเขาตรวจสอบความคลาดเคลื่อนเช่นนั้นแม้ว่าการสะกดคำผิดจะแตกต่างกัน
Eliah Kagan

9
ให้แน่ใจว่าคุณเช่นเดียวกันกับhostname hostsเช่นชื่อโฮสต์คือubuntu-pcและโฮสต์เป็นubuntu-pcจะต้องเหมือนกัน
มูฮัมหมัด Sholihin

1
ฉันวิ่งเข้าไปในนี้วันนี้ ปัญหาคือสิ่งที่ฉันมีในชื่อโฮสต์ไม่ได้อยู่ใน / etc / hosts หากต้องการปัญญา: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com ฉันต้องการเพิ่ม 'mybox' หลังจากชื่อโดเมนของฉันใน / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray

3
ฉันไม่สามารถโพสต์คำตอบได้เพราะคำถามนี้ได้รับการคุ้มครองและฉันไม่มีชื่อเสียงเพียงพอที่นี่ sudo /etc/init.d/network-manager restartในกรณีของฉันฉันจะแก้ไขปัญหาโดยการรีสตาร์ทเครือข่ายผู้จัดการ: อย่างไรก็ตามฉันสงสัยว่าทำไมตอนแรกsudoเสียเวลารอสิ่งที่เกี่ยวข้องกับเครือข่าย ไม่ควรsudoทำงานโดยไม่มีปัญหาเมื่อเครือข่ายไม่พร้อมใช้งาน
bli

คำตอบ:


999

ตรวจสอบสองสิ่ง (สมมติว่าเครื่องของคุณถูกเรียกmy-machineคุณสามารถเปลี่ยนได้ตามความเหมาะสม):

  1. ว่า/etc/hostnameไฟล์ที่มีเพียงแค่ชื่อของตัวเครื่อง

  2. ที่มีรายการสำหรับ/etc/hosts localhostมันควรจะมีสิ่งที่ชอบ:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 เครื่องของฉัน
    

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


31
ชื่อโฮสต์จะไม่เปลี่ยนแปลงจนกว่าคุณจะรีบูต หากคุณต้องการเปลี่ยนโดยไม่ต้องรีบูตเครื่องให้ทำตามขั้นตอนข้างต้นและหลังจากนั้นให้รัน: - "ชื่อโฮสต์ sudo my-machine" เพื่อดูว่าสิ่งนี้ใช้งานได้หรือไม่ "ชื่อโฮสต์ sudo" จะแสดงชื่อโฮสต์ของเครื่องของคุณ วิธีนี้อาจใช้เป็นวิธีชั่วคราวในการเปลี่ยนชื่อโฮสต์ด้วย หลังจากรีสตาร์ทจะใช้ค่าจากไฟล์ / etc / hostname
Yashvit

2
หมายเหตุ: เนื่องจากคุณไม่สามารถ sudo เริ่มได้ยากที่จะแก้ไขไฟล์เหล่านั้น วิธีแก้ปัญหาของฉันคือฉันสามารถ sudo visudo และเปลี่ยน#%admin ALL=(ALL) ALLเป็น%admin ALL=NOPASSWD: ALLแล้วรีบูตและ sudo su - แก้ไขไฟล์เหล่านั้นตั้งค่า / แก้ไขชื่อโฮสต์รีบูตอีกครั้งและทุกอย่างทำงานได้
Ian M

4
ฉันใช้ระบบย่อย Linux ใน Windows และฉันประสบปัญหานี้ หลังจากทำตามคำตอบของคุณแล้วจะได้รับการแก้ไข
amarVashishth

2
คุณยังอาจต้องเพิ่ม::1 localhostการ/etc/hosts(นี้เป็นรุ่นที่ IPv6 ของ 127.0.0.1 อาคาอยู่ย้อนกลับ)
วูดโรว์บาร์โลว์

11
ทำไมตัวอย่างของคุณมี127.0.0.1 localhostแต่127.0.1.1 my-machine?
อดัม

193

แก้ไข /etc/hostsและต่อท้ายชื่อโฮสต์ใหม่ของคุณไปยังบรรทัด 127.0.0.1 (หรือสร้างขึ้นบรรทัดใหม่หากคุณต้องการ)

ฉันดูเหมือนว่า:

127.0.0.1       localhost localhost.localdomain penguin

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

แทนที่penguinในตัวอย่างข้างต้นด้วยชื่อโฮสต์ใหม่ของคุณตามที่ระบุใน/etc/hostnameไฟล์


2
เขาจะแก้ไขไฟล์ / etc / hosts ได้อย่างไรถ้าเขาไม่สามารถ sudo ได้? เว้นแต่เขาสร้างบัญชีไม้กางเขนที่มีรหัสผ่าน (ความคิดที่ไม่ดี)
เดนนิส

9
@Dennis คุณยังสามารถใช้งานsudoได้แม้ว่าข้อความนั้นจะแสดงขึ้นมา IIRC คุณยังต้องป้อนรหัสผ่านในแต่ละการเรียกร้อง หากวิธีนี้ใช้ไม่ได้คุณสามารถรีบูตในคอนโซลการกู้คืนและใช้การเปลี่ยนแปลง บัญชีรูทพร้อมรหัสผ่านไม่ได้รับการสนับสนุน
Lekensteyn

68

เพิ่มชื่อโฮสต์ของคุณเพื่อ/etc/hostsชอบ:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts

2
มันฉลาด แต่ฉันไม่คิดว่ามันจะเป็นความคิดที่ดีที่จะทำสิ่งนี้โดยอัตโนมัติ
mwfearnley

1
นี่เป็นการผนวกชื่อโฮสต์ไปยังไฟล์โฮสต์ มีข้อสันนิษฐานโดยธรรมชาติว่าไม่มีอะไรในระหว่างการวนรอบ ip การแมปไปยัง localhost และจุดสิ้นสุดของไฟล์ แต่ตอนนี้มีบางสิ่ง IPv6 ระหว่างบรรทัดนี้และจุดสิ้นสุดของไฟล์ซึ่งในกรณีนี้การแก้ปัญหานี้ไม่ได้จบลงให้คุณ สิ่งที่คุณต้องการ ความคิดเห็นที่เกี่ยวข้อง: การแก้ไขไฟล์นี้หรือไฟล์อื่น ๆ จำเป็นต้องใช้ sudo และเป็น sudo ที่เราพยายามแก้ไข เรายังต้องสามารถเรียกใช้ sudo ได้ ในกรณีนี้คุณสามารถใช้ชื่อโฮสต์ sudo -h เพื่อเปลี่ยนสิทธิ์บนไฟล์หรือเพิ่มระดับความสูงเพื่อแก้ไข
shivesh suman

1
สิ่งนี้ล้มเหลวเพราะฉันไม่สามารถ "sudo tee .. " แต่นี่เป็นการหลอกลวง: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein

31

หมายเหตุนี่เป็นคำตอบสำหรับคำถามนี้ที่ถูกรวมเข้ากับคำถามนี้

ชื่อโฮสต์ของคุณ ( dave00-G31M-ES2L) /etc/hostsไม่ได้เป็นตัวแทนใน เพิ่มLลงในบรรทัดนี้:

127.0.1.1   dave00-G31M-ES2

ดังนั้นมันจะกลายเป็น:

127.0.1.1   dave00-G31M-ES2L

เพื่อให้บรรลุสิ่งนี้ให้เปิดคอนโซล (กดCtrl+ Alt+ T) และพิมพ์:

sudo gedit /etc/hosts

เพิ่มตัวอักษรLดังกล่าวบันทึกและออก


10
จำไว้! ใช้sudoedit(หรือsudo -e) ในการระบุตัวแก้ไขที่ต้องการให้ใช้EDITORตัวแปรสภาพแวดล้อม (เช่น. export EDITOR=vim) ในขณะที่มันสร้างสำเนาออฟไลน์สำหรับการแก้ไขแล้วเขียนทับหลังจากการแก้ไข
ม.ค.

2
และมีอีกคนหนึ่งที่นี่ที่แนะนำเมื่อไม่มีอีกต่อไปsudo ไม่ทำงานครับ sudosudosudo: unable to resolve host ...
Green

@Green: sudoไม่ ข้อความแสดงข้อผิดพลาดที่คุณพูดถึงนั้นมาจากsudoคำสั่ง คุณอาจหมายถึงสิ่งที่แตกต่างกันอย่างไร
ธ อร์

@Green sudoทำงานได้ดี มันไม่สามารถเก็บสถานะใด ๆ ได้ (เช่นที่ Lekensteyn พูดที่อื่นคุณต้องใส่รหัสผ่านของคุณทุกครั้ง)
Wlerin

4
หากคุณมีปัญหานี้กับ Bash ของ W10 และมาถึงคำถามนี้จาก google นี่คือคำตอบที่เหมาะกับฉัน ฉันเปลี่ยน 127.0.0.1 เป็นเหมือน "127.0.0.1 localhost DESKTOP-SLQK4CV" (โดยทำ "sudo vim / etc / hosts" (เคล็ดลับอย่างรวดเร็วสำหรับ newbies กลุ่ม: กด i ก่อนพิมพ์เพื่อเปลี่ยนเป็นโหมดแทรกกด esc เพื่อออก ที่เขียน ": wq" เพื่อบันทึกและออกหรือ ": q!" เพื่อออกโดยไม่บันทึก) ในกรณีของฉัน sudo ทำงาน แต่เพิ่งบอกว่ามันไม่สามารถเชื่อมต่อกับ DESKTOP-SLQK4CV) และมันเริ่มทำงานให้ฉัน
Ave

16

ฉันมีปัญหานี้เมื่อฉันใช้อูบุนตูกับ VPS ฉันแก้ไขมันเพื่อแก้ไขไฟล์ / etc / hosts

เรียกใช้คำสั่งนี้:

sudo nano /etc/hosts

แล้วเพิ่ม:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

ฉันหวังว่าจะแก้ปัญหาของคุณ :)

PS: อย่าลืมรีบูตเครื่องคอมพิวเตอร์ของคุณ!


1
และดูว่าชื่ออุปกรณ์ของคุณ (พิมพ์บนแถบชื่อเทอร์มินัลหลังจากเครื่องหมาย @) ตรงกับชื่อในบรรทัดที่สองของhostsไฟล์ ("ubuntu" ในตัวอย่างของ Luca) บรรทัดแรกอาจเป็นเพียง "localhost"
Waldir Leoncio

2
จำไว้! ใช้sudoedit(หรือsudo -e) ในการระบุตัวแก้ไขที่ต้องการให้ใช้EDITORตัวแปรสภาพแวดล้อม (เช่น. export EDITOR=vim) ในขณะที่มันสร้างสำเนาออฟไลน์สำหรับการแก้ไขแล้วเขียนทับหลังจากการแก้ไข
Jan

11

ฉันมีปัญหาเดียวกันแม้ว่าชื่อโฮสต์ในไฟล์ / etc / hostname ของฉันและไฟล์ / etc / hosts ตรงกัน

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


11

ใน AWS ไปที่ vpc ของคุณและเปิด "ชื่อโฮสต์ DNS"


2
ยินดีต้อนรับสู่ askubuntu! คุณช่วยขยายความหน่อยได้ไหม? ยังไม่ชัดเจนว่าคุณหมายถึงอะไร (อย่างน้อยสำหรับฉัน) ..
เอ็ลเดอร์ Geek

2
นี่คือคำตอบที่ช่วยฉัน Amazon AWS เปลี่ยนไปตั้งแต่ครั้งสุดท้ายที่ฉันดูมัน VPCs มีตัวเลือก DNS และจำเป็นต้องเปิดใช้ก่อนที่การแก้ไข DNS จะทำงานได้
Chris Moore

1
ตัวเลือกเปิดใช้งานชื่อโฮสต์ DNS สามารถพบได้ (ตัวอย่าง) ในเมนูคลิกขวาของรายการ
vpc

ไม่มีDNS Hostnames
Green

7

อาการที่ให้ในคำถามอาจสัมพันธ์อย่างมากกับปัญหาเฉพาะนี้:

$ hostname --fqdn
hostname: Temporary failure in name resolution

มีวิธีการต่าง ๆ ที่สามารถแก้ไขได้ซึ่งหนึ่งในนั้นคือการเพิ่มชื่อโฮสต์ของคุณเป็น localhost ใน/etc/hosts(ดังแสดงในคำตอบอื่น ๆ ) นี่อาจเป็นสิ่งที่ถูกต้องที่ต้องทำโดยทั่วไป แต่ก็ไม่ใช่วิธีแก้ปัญหาที่เป็นไปได้เท่านั้น

"ชื่อโดเมนแบบเต็ม" อาจจัดทำโดยเซิร์ฟเวอร์ DNS ภายนอกหรือคล้ายกัน (หากมีอยู่ในเครือข่ายของคุณ) ในกรณีนี้จะไม่บ่นแม้จะขาดหายไปในรายการsudo/etc/hosts


หมายเหตุ: sudoความพยายามในการยกเลิกการอ้างอิงชื่อโฮสต์แม้ว่าจะไม่จำเป็นก็ตามเนื่องจากความสามารถเพิ่มเติมในไฟล์ sudoers ดูคำสั่ง sudo พยายามที่จะค้นหาชื่อโฮสต์

ตราบใดที่การหน่วงเวลาไม่นานเกินไปข้อความแสดงข้อผิดพลาดนี้จะไม่มีอันตราย


ค่อนข้างเร็ว:sudo --host=localhost
nobar


5

ฉันพบข้อความแสดงข้อผิดพลาดเดียวกัน ฉันคิดว่ากระทู้สนทนาที่ AWS Developer Forums เป็นทางออกที่ดีกว่า:

"ไปที่คอนโซลการจัดการ VPC เลือก VPC คลิกที่การกระทำเลือกแก้ไขชื่อโฮสต์ DNS และเลือกใช่"

https://forums.aws.amazon.com/thread.jspa?messageID=699718


5

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

ฉันใช้เวลา 30 นาทีในการต่อสู้กับข้อผิดพลาดนี้หลังจากแก้ไขชื่อโฮสต์และไฟล์โฮสต์และทำงานsudo service hostname restartจนกว่าฉันจะวิ่งsudo hostnameและเห็นว่าชื่อโฮสต์นั้นเป็นค่าใหม่ถึงแม้ว่าพรอมต์จะแสดงค่าเก่า


1
ปัญหาไม่ใช่เทอร์มินัลอีมูเลเตอร์มันคือเชลล์ที่แคชค่าไว้
Mark Stosberg

4

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

sudo: unable to resolve host (none)

หลังจากเปลี่ยนชื่อโฮสต์กลับไปเป็น `localhost ทุกอย่างทำงานได้ดีอีกครั้ง

hostname localhost

3

/etc/hostsทุกคนให้คำแนะนำในการปรับเปลี่ยน แต่ในบางกรณีสิ่งนี้อาจเป็นไปไม่ได้ (ตัวอย่างเช่นภายในคอนเทนเนอร์นักเทียบท่า) ดังนั้นฉันต้องหาวิธีที่ดีกว่าและฉันก็พบสิ่งนี้:

echo "alias sudo='sudo -h 127.0.0.1'" >> ~/.bash_aliases
source ~/.bashrc

นามแฝงไม่ทำงานในสคริปต์ทุบตี แต่เราสามารถใช้ตัวแปร: sudo='sudo -h 127.0.0.1'


2

ขออภัยฉันไม่สามารถช่วยคุณได้มากนักเนื่องจากมันบอกว่า "ไม่สามารถแก้ปัญหาโฮสต์" ได้ลองใช้

hostname

และดูว่าเอาต์พุตเป็นชื่อโฮสต์ของเครื่องหรือไม่ ถ้าไม่ใช่ปัญหาคือการกำหนดค่าโฮสต์ไม่ใช่ sudo


ฉันทำอย่างนั้นได้รับชื่อโฮสต์ของเครื่องของฉัน ฉันยังมีรายการใน / etc / hosts ฉันยังคงได้รับข้อผิดพลาด
chandresh

คุณรีบูตเครื่องหลังจากเปลี่ยนไฟล์โฮสต์หรือไม่
animaletdesequia

ไม่แม้ว่าทีมไอทีของฉันจะบอกว่ามีปัญหากับไฟล์ล็อคเช่นเดียวกับคีย์ gpg กับหุ่นกระบอก ตอนนี้มันได้รับการแก้ไขโดยไม่ต้องรีสตาร์ท ..
chandresh

2

OP เขียนว่า:

มันอยู่ใน / etc / hostname ในเซิร์ฟเวอร์ที่ป่วยสองเครื่องของเราดูเหมือนว่า:

ubuntu@(none):~$ cat /etc/hostname
linux-web-n ip-10-128-##-##

ขณะที่อยู่บนเซิร์ฟเวอร์ที่ไม่มีปัญหานี้เรามี:

ubuntu@ip-10-128-##-###:~$ cat /etc/hostname
ip-10-128-##-###

ลบlinux-web-nส่วนแล้วทำการรีบูทและทุกอย่างเรียบร้อยดี


2

คุณอาจได้รับข้อผิดพลาดหากไฟล์โฮสต์หรือชื่อโฮสต์ของคุณมีอักขระที่ผิดกฎหมาย อนุญาตให้ใช้สัญลักษณ์เหล่านี้เท่านั้น: az, AZ, 0-9


2

ฉันมีปัญหาเดียวกันนี้! ฉันเปลี่ยนชื่อ VPS ของฉันผ่านแผงควบคุมของผู้ดูแลระบบออนไลน์ซึ่งไม่ได้เปลี่ยนชื่อเครื่องในไฟล์โฮสต์ทั้งหมดที่ฉันทำคือ:

sudo nano /etc/hosts

จากนั้นฉันจะแก้ไขจากสิ่งนี้:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

สำหรับสิ่งนี้:

127.0.1.1 Debian Debian
127.0.0.1 localhost

และนั่นก็แก้ไขข้อผิดพลาดของฉัน! หวังว่านี่จะช่วยได้!


1

ฉันมีปัญหาเดียวกัน. ฉันแก้ไขได้โดยแก้ไขไฟล์ / etc / hosts และ / etc / hostname ... บนไฟล์ / etc / hosts เพียงแก้ไขส่วนบนดังที่แสดงด้านล่าง

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname

127.0.1.1 localhost myhostnameหรือ127.0.1.1 myhostname?
Mostafa Ahangarha

2
คุณจะแก้ไข/etc/hostsได้sudoอย่างไร sudoไม่ทำงานsudo: unable to resolve host ...
Green

1

หากคุณไม่สามารถ sudo คุณสามารถล็อกอินด้วย root ผ่าน su IE: su root (ในระยะ x) จากนั้นให้รหัสผ่านรูตเมื่อได้รับแจ้งจากนั้นคุณสามารถแก้ไขไฟล์ด้วยนาโน รหัสผ่านรูทใน 'buntu เหมือนกับรหัสผ่านที่คุณจะใช้สำหรับ sudo


5
sudoรหัสผ่านรากในอูบุนตูไม่ได้เป็นรหัสผ่านเดียวกันสำหรับ rootเป็นบัญชีของตัวเองซึ่งไม่มีรหัสผ่านที่ตั้งไว้โดยค่าเริ่มต้น
TheWanderer

1

หากคุณใช้ Vagrant ให้ลงชื่อเข้าใช้ในแขกและเรียกใช้ apt-get --no-install-recommends install virtualbox-guest-utils


0

ในกรณีที่ปัญหาของคุณคือ/etc/hostnameไฟล์นั้นและ/etc/hostsทั้งสองไฟล์มีชื่อโฮสต์ที่คุณต้องการและเครื่องของคุณก็ยังแสดงข้อผิดพลาด

sudo: unable to resolve host

ลองบังคับชื่อโฮสต์

sudo hostname -F /etc/hostname

คุณอาจจะยังคงได้รับข้อผิดพลาดเดียวกัน แต่ลองออกจากระบบและเข้าสู่ระบบอีกครั้ง

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