Pesan kesalahan “sudo: tidak dapat menyelesaikan host (tidak ada)”

736

Ketika saya menjalankan sudoterminal macet selama beberapa detik dan kemudian menampilkan pesan kesalahan. Terminal saya terlihat seperti ini:

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

Apa yang bisa saya lakukan untuk menyelesaikannya?

Kit Sunde
sumber
2
Silakan kirim konten /etc/hostnamedan /etc/hosts.
atur
48
Saya sarankan agar tidak menutup pertanyaan ini karena terlalu terlokalisasi . Ada banyak pengguna yang secara keliru mengira mereka telah memasukkan satu nama dalam hostsfile mereka tetapi memasukkan nama yang berbeda, terutama karena pada banyak jaringan, komputer diberi nama yang sama. Pertanyaan ini (dan jawaban) akan muncul ketika seseorang mencari dengan masalah itu, dan jawabannya akan meminta mereka untuk memeriksa perbedaan tersebut, meskipun kesalahan ejaan yang tepat akan berbeda.
Eliah Kagan
9
pastikan hostnamesama dengan Anda hosts. mis. nama host adalah ubuntu-pc dan host adalah ubuntu-pc harus sama.
Muhammad Sholihin
1
Saya mengalami ini hari ini. Masalahnya adalah apa yang saya miliki di hostname tidak ada di / etc / hosts. Intinya: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Saya perlu menambahkan 'mybox' setelah nama domain saya di / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray
3
Saya tidak dapat mengirim jawaban karena pertanyaan ini dilindungi dan saya tidak memiliki reputasi yang cukup di sini. Dalam kasus saya, saya memecahkan masalah dengan me-restart network-manager: sudo /etc/init.d/network-manager restart. Namun, saya bertanya-tanya mengapa pada awalnya sudomembuang waktu menunggu hal-hal yang berhubungan dengan jaringan. Tidakkah seharusnya sudobekerja tanpa masalah ketika jaringan tidak tersedia?
bli

Jawaban:

998

Dua hal yang perlu diperiksa (dengan asumsi mesin Anda dipanggil my-machine, Anda dapat mengubahnya sesuai keperluan):

  1. Bahwa /etc/hostnamefile tersebut hanya berisi nama mesin.

  2. Itu /etc/hostsmemiliki entri untuk localhost. Seharusnya memiliki sesuatu seperti:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 mesin saya
    

Jika salah satu dari file-file ini tidak benar (karena Anda tidak bisa sudo), Anda mungkin harus me-reboot mesin ke mode pemulihan dan membuat modifikasi, kemudian reboot ke lingkungan Anda yang biasa.

Jeremy Kerr
sumber
31
Nama host tidak akan berubah sampai Anda reboot. Jika Anda ingin mengubahnya tanpa me-reboot mesin kemudian ikuti langkah-langkah di atas dan setelah menjalankan itu: - "sudo hostname my-machine" untuk melihat apakah ini berhasil jalankan "sudo hostname" Ini akan menampilkan nama host mesin Anda. Metode ini mungkin digunakan sebagai metode sementara untuk mengubah nama host juga. setelah restart, nilai dari file / etc / hostname digunakan.
Yashvit
2
Catatan: karena Anda tidak dapat memulai sudo, sulit untuk mengedit file-file itu. Solusi saya adalah saya entah bagaimana bisa sudo visudo dan mengubah #%admin ALL=(ALL) ALLke %admin ALL=NOPASSWD: ALL, lalu reboot, dan sudo su -, mengedit file-file, mengatur / hostname yang benar, reboot lagi, dan semuanya bekerja.
Ian M
4
Saya menggunakan Linux Subsystem di Windows dan saya menghadapi masalah ini. Setelah mengikuti jawaban Anda, Itu telah diselesaikan.
amarVashishth
2
Anda juga mungkin perlu menambahkan ::1 localhostuntuk /etc/hosts(ini adalah versi IPv6 dari 127.0.0.1, alias alamat loopback)
Woodrow Barlow
11
Mengapa contoh Anda memiliki 127.0.0.1 localhosttetapi 127.0.1.1 my-machine?
Adam
193

Edit /etc/hosts dan tambahkan nama host baru Anda ke baris 127.0.0.1 (atau buat baris baru jika Anda suka).

Tambang saya terlihat seperti:

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

Ganti penguindalam contoh di atas dengan nama host baru Anda sebagaimana dinyatakan dalam /etc/hostnamefile.

Lekensteyn
sumber
2
Bagaimana dia bisa mengedit file / etc / hosts jika dia tidak bisa sudo? Kecuali dia membuat akun rood dengan kata sandi (ide buruk)
Dennis
9
@ Dennis Anda masih dapat menjalankan sudobahkan jika pesan itu ditampilkan. IIRC Anda masih harus memasukkan kata sandi di setiap doa. Jika ini tidak berhasil, Anda dapat reboot ke konsol pemulihan dan menerapkan perubahan. Akun root dengan kata sandi tidak disarankan.
Lekensteyn
68

Tambahkan nama host Anda /etc/hostsseperti itu:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Collin Anderson
sumber
2
Ini pintar, tapi saya rasa itu bukan ide yang bagus untuk mengotomatisasi sesuatu seperti ini.
mwfearnley
1
Ini menambahkan nama host ke file host. Ada asumsi yang melekat bahwa tidak ada di antara loopback ip pemetaan ke localhost dan akhir file, tetapi sekarang ada beberapa hal IPv6 antara baris dan akhir file ini, dalam hal ini solusi ini tidak benar-benar berakhir memberi Anda apa yang Anda inginkan. Komentar terkait: Mengedit ini atau file lain memerlukan penggunaan sudo dan itu adalah sudo yang kami coba perbaiki. Kita masih harus bisa menjalankan sudo. Dalam hal ini sudo -h hostname dapat digunakan untuk pertama-tama mengubah izin pada file atau mendapatkan elevasi untuk mengeditnya.
shivesh suman
1
ini gagal karena saya tidak bisa "sudo tee .." tetapi ini berhasil: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein
31

Catatan, ini adalah jawaban untuk pertanyaan ini yang telah digabung dengan yang ini.

Nama host Anda ( dave00-G31M-ES2L) tidak terwakili dalam /etc/hosts. Tambahkan sebuah Lke baris ini:

127.0.1.1   dave00-G31M-ES2

Jadi itu menjadi:

127.0.1.1   dave00-G31M-ES2L

Untuk mencapai ini, buka konsol (tekan Ctrl+ Alt+ T) dan ketik:

sudo gedit /etc/hosts

Tambahkan surat Lseperti yang disebutkan, simpan dan keluar.

Thor
sumber
10
Ingat! Gunakan sudoedit(atau sudo -e). Untuk menentukan editor yang disukai, gunakan EDITORvariabel lingkungan (mis. export EDITOR=vim) Karena membuat salinan offline untuk diedit dan kemudian ditimpa dengan bersih setelah diedit.
Jan
2
Dan ada satu lagi di sini yang menyarankan sudoketika tidak ada lagi sudo. sudotidak berfungsi, tuan. sudo: unable to resolve host ...
Hijau
@ Hijau: Tidak sudo? Pesan kesalahan yang Anda sebutkan berasal dari sudoperintah. Mungkin Anda bermaksud sesuatu yang berbeda?
Thor
@Green sudobekerja dengan baik. Itu tidak bisa menyimpan keadaan apa pun (yaitu seperti yang dikatakan Lekensteyn di tempat lain Anda harus memasukkan kata sandi setiap waktu).
Wlerin
4
Jika Anda memiliki masalah ini pada Bash W10 dan sampai pada pertanyaan ini dari google, ini adalah jawaban yang bekerja untuk saya. Saya mengubah 127.0.0.1 sehingga terlihat seperti "127.0.0.1 localhost DESKTOP-SLQK4CV" (dengan melakukan "sudo vim / etc / hosts" (tip cepat untuk pemula pemula: tekan i sebelum mengetik untuk beralih ke mode insert, tekan esc untuk keluar itu, tulis ": wq" untuk menyimpan dan keluar atau ": q!" untuk keluar tanpa menyimpan), dalam kasus saya sudo bekerja tetapi hanya mengatakan bahwa itu tidak dapat terhubung ke DESKTOP-SLQK4CV) dan mulai bekerja untuk saya.
Ave
16

Saya memiliki masalah ini ketika saya menggunakan ubuntu di VPS. Saya memecahkannya mengedit file / etc / hosts.

jalankan perintah ini:

sudo nano /etc/hosts

lalu tambahkan:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Saya harap itu akan menyelesaikan masalah Anda :)

PS: Ingatlah untuk me-reboot komputer Anda!

Luca D'Amico
sumber
1
Juga, lihat apakah nama perangkat Anda (dicetak pada bilah judul Terminal setelah tanda @) cocok dengan nama pada baris kedua hostsfile ("ubuntu" pada contoh Luca). Baris pertama mungkin juga hanya "localhost".
Waldir Leoncio
2
Ingat! Gunakan sudoedit(atau sudo -e). Untuk menentukan editor yang disukai, gunakan EDITORvariabel lingkungan (mis. export EDITOR=vim) Karena membuat salinan offline untuk diedit dan kemudian ditimpa dengan bersih setelah diedit.
Jan
11

Saya mengalami masalah yang sama meskipun nama host di file / etc / hostname saya dan / etc / hosts cocok.

Nama hostanku adalah "staging_1". Ternyata Anda tidak dapat memiliki garis bawah pada nama host Anda, itulah sebabnya saya mendapatkan kesalahan ini. Mengubah garis bawah ke tanda hubung memperbaiki masalah saya.

Chris.B
sumber
11

Di AWS, buka vpc Anda dan nyalakan "Nama Host DNS".

Erick
sumber
2
Selamat datang di askubuntu! Bisakah Anda sedikit mengembangkan ini? Tidak terlalu jelas apa yang Anda maksudkan (setidaknya bagi saya) ..
Penatua Geek
2
Inilah jawaban yang membantu saya. Amazon AWS berubah sejak terakhir kali saya melihatnya. VPC memiliki opsi DNS, dan harus dinyalakan sebelum resolusi DNS apa pun akan berfungsi.
Chris Moore
1
opsi Aktifkan Nama Host DNS dapat ditemukan (misalnya) di menu klik kanan entri vpc
Matteo Scotuzzi
Tidak adaDNS Hostnames
Hijau
7

Gejala yang diberikan dalam pertanyaan dapat berkorelasi kuat dengan masalah yang lebih spesifik ini:

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

Ada beberapa cara untuk menyelesaikannya, salah satunya adalah menambahkan hostname Anda sebagai host lokal /etc/hosts(seperti yang ditunjukkan dalam beberapa jawaban lain). Ini mungkin hal yang benar untuk dilakukan secara umum, tetapi itu bukan satu-satunya resolusi yang mungkin.

"Nama domain yang sepenuhnya memenuhi syarat" dapat diberikan oleh server DNS eksternal atau serupa (jika tersedia di jaringan Anda). Dalam hal ini, sudotidak akan mengeluh, meskipun ada entri yang hilang /etc/hosts.


Catatan: sudomencoba untuk men-dereference nama host, walaupun itu tidak diharuskan, karena kemampuan opsional dalam file sudoers. Lihat perintah sudo yang mencoba mencari nama host .

Selama penundaan tidak terlalu lama, pesan kesalahan ini biasanya tidak berbahaya.

bangsawan
sumber
Agak lebih cepat:sudo --host=localhost
nobar
Suara positif untuk perintah sudo mencoba mencari tautan hostname
x-yuri
5

Beberapa emulator terminal tidak akan memperbarui prompt dengan nama host yang benar sampai Anda menutup dan memulai kembali emulator (lxterminal, saya berbicara dengan Anda).

Saya menghabiskan 30 menit berjuang dengan kesalahan ini setelah mengedit nama host saya dan file host dan berjalan sudo service hostname restartsampai saya berlari sudo hostnamedan melihat bahwa nama host adalah nilai baru, meskipun prompt menunjukkan nilai lama.

dagbel
sumber
1
Masalahnya bukan emulator terminal, melainkan shell yang telah men-cache nilai.
Mark Stosberg
4

Dalam kasus saya itu masalahnya, saya mengubah hostnameke mankarena saya ingin tahu apakah ada beberapa parameter yang dapat Anda gunakan hostname. Alih-alih itu mengubah saya hostnamemenjadi mandan saya selalu mendapat pesan yang sama seperti Anda

sudo: unable to resolve host (none)

setelah mengubah nama host kembali ke `localhost semuanya bekerja dengan baik lagi

hostname localhost
XandruCea
sumber
3

Semua orang menyarankan untuk memodifikasi /etc/hosts. Tetapi dalam beberapa kasus ini mungkin tidak mungkin (misalnya di dalam wadah buruh pelabuhan). Jadi, saya harus menemukan cara yang lebih baik dan saya datang dengan ini:

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

Alias ​​tidak berfungsi dalam skrip bash, tetapi kita dapat menggunakan variabel: sudo='sudo -h 127.0.0.1'

dashohoxha
sumber
2

Maaf saya tidak bisa banyak membantu Anda tetapi, karena dikatakan "tidak dapat menyelesaikan host" coba jalankan:

hostname

Dan lihat apakah outputnya adalah nama host dari mesin tersebut. Jika tidak, masalahnya adalah konfigurasi host, bukan sudo.

animaletdesequia
sumber
Saya melakukan itu mendapat nama host dari mesin saya. Saya juga punya entri di / etc / hosts. Saya masih mendapatkan kesalahan.
chandresh
Apakah Anda me-reboot mesin setelah mengubah file host?
animaletdesequia
Tidak. Meskipun tim IT saya mengatakan ada masalah dengan file kunci serta kunci gpg dengan puppetlab. Sekarang, itu bisa diselesaikan tanpa restart ..
chandresh
2

OP menulis:

Semuanya ada di / etc / hostname. Pada dua server kami yang sakit, tampilannya seperti ini:

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

Saat berada di server tanpa masalah ini, kami memiliki:

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

Dihapus linux-web-nbagiannya, reboot dan semuanya baik-baik saja.

Radu Rădeanu
sumber
2

Anda mungkin mendapatkan kesalahan jika file host atau nama host mengandung karakter ilegal. Hanya simbol-simbol ini yang diizinkan: az, AZ, 0-9

Marcello
sumber
2

Saya punya masalah yang sama! Saya mengubah nama VPS saya melalui panel kontrol admin online yang tidak mengubah nama mesin di file hosts Yang saya lakukan adalah menjalankan:

sudo nano /etc/hosts

Kemudian saya mengeditnya dari ini:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

Untuk ini:

127.0.1.1 Debian Debian
127.0.0.1 localhost

dan itu memperbaiki kesalahan saya! Semoga ini bisa membantu!

Sint
sumber
1

Saya memiliki masalah yang sama. Saya menyelesaikannya dengan mengedit file / etc / hosts dan / etc / hostname ... pada file / etc / hosts, cukup edit bagian atas seperti yang ditunjukkan di bawah ini.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname
Centy
sumber
127.0.1.1 localhost myhostnameatau 127.0.1.1 myhostname?
Mostafa Ahangarha
2
Bagaimana Anda bisa mengedit /etc/hoststanpa sudo. sudotidak berfungsisudo: unable to resolve host ...
Hijau
1

jika Anda tidak bisa sudo Anda BISA login sebagai root via su. IE: su root (dalam x-term). lalu berikan kata sandi root saat diminta, maka Anda dapat mengedit file dengan nano. Kata sandi root di 'buntu sama dengan kata sandi yang akan Anda gunakan untuk sudo.

ken scharf
sumber
5
Kata sandi root di Ubuntu bukan kata sandi yang sama dengan sudo. rootadalah akunnya sendiri, yang tidak memiliki kata sandi yang ditetapkan secara default.
TheWanderer
1

Jika Anda menggunakan Vagrant, maka login ke tamu dan jalankan apt-get --no-install-recommends install virtualbox-guest-utils

tanmoy
sumber
0

Jika masalah Anda adalah /etc/hostnamefile itu dan /etc/hosts, kedua file memiliki nama host yang Anda inginkan dan masih mesin Anda menunjukkan kesalahan

sudo: unable to resolve host

Coba, paksakan nama host

sudo hostname -F /etc/hostname

Anda mungkin masih akan mendapatkan kesalahan yang sama, tetapi cobalah keluar dan masuk kembali. Ini berhasil untuk saya.

GypsyCosmonaut
sumber