エラーメッセージ「sudo:ホストを解決できません(なし)」


737

実行するとsudo、端末が数秒間動かなくなり、エラーメッセージが出力されます。私の端末は次のようになります。

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

それを解決するために何ができますか?


2
/etc/hostnameとの内容を投稿してください/etc/hosts
手配

48
ローカライズさすぎているため、この質問を閉じることをお勧めします。hosts特に多くのネットワークではコンピューターの名前が似ているため、ファイルに1つの名前を入れたのに間違って別の名前を入れたと誤って考えるユーザーが多くいます。この問題(および回答)は、誰かがその問題で検索すると表示され、答えはスペルのミススペルが異なっていても、そのような矛盾をチェックするように促します。
エリアケイガン

9
hostnameと同じことを確認してくださいhosts。たとえば、ホスト名はubuntu-pcで、ホストはubuntu-pcである必要があります。
ムハンマドショヒンヒン

1
今日私はこれに出くわしました。問題は、ホスト名にあるものが/ etc / hostsにないことでした。たとえば、$ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com / etc / hostsのドメイン名の後に「mybox」を追加する必要がありました=> 192.168.1.2 mybox.example.com mybox
Ray

3
この質問は保護されており、ここで十分な評判を得ていないため、回答を投稿できません。私の場合、network-managerを再起動することで問題を解決しました:sudo /etc/init.d/network-manager restart。しかし、そもそもsudoネットワーク関連のものを待つ時間を無駄にしているのだろうかと思っています。sudoネットワークが利用できないときに問題なく動作するべきではありませんか?
ブリ

回答:


999

確認する2つのこと(マシンが呼び出されたと仮定してmy-machine、これを適宜変更できます):

  1. その/etc/hostnameファイルは、マシンの名前だけが含まれています。

  2. /etc/hostsエントリがありlocalhostます。次のようなものが必要です。

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 my-machine
    

これらのファイルのいずれかが正しくない場合(sudoができないため)、マシンを再起動して復旧モードにし、変更を加えてから、通常の環境に再起動する必要があります。


31
ホスト名は再起動するまで変わりません。マシンを再起動せずに変更したい場合は、上記の手順を実行し、その後実行します:-"sudo hostname my-machine"が機能するかどうかを確認するには、 "sudo hostname"を実行します。マシンのホスト名が表示されます。この方法は、ホスト名を変更するための一時的な方法としても使用できます。再起動後、/ etc / hostnameファイルの値が使用されます。
ヤシュビット

2
注:最初からsudoを実行できないため、これらのファイルを編集することは困難です。私の解決策は、どういうわけかsudo visudoに変更#%admin ALL=(ALL) ALL%admin ALL=NOPASSWD: ALL、に再起動してからsudo su-を実行し、それらのファイルを編集し、ホスト名を設定/修正し、再起動して、すべてが機能することでした。
イアンM

4
WindowsでLinuxサブシステムを使用していますが、この問題に直面しました。あなたの答えに従った後、解決されました。
amarVashishth

2
追加::1 localhostする必要がある場合もあります/etc/hosts(これは127.0.0.1のIPv6バージョン、別名ループバックアドレスです)
Woodrow Barlow

11
なぜあなたの例は持って127.0.0.1 localhost127.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
sudoができない場合、どうすれば/ etc / hostsファイルを編集できますか?彼がパスワードで不正なアカウントを作成しない限り(悪い考え)
デニス

9
@Dennis sudoそのメッセージが表示されていても実行できます。ただし、IIRCでは、呼び出しのたびにパスワードを入力する必要があります。これが機能しない場合は、回復コンソールを再起動して変更を適用できます。パスワードを持つルートアカウントは推奨されません。
-Lekensteyn

68

次の/etc/hostsようにホスト名を追加します。

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

2
それは賢いですが、このような何かを自動化することは良い考えだとは思わない。
mwfearnley

1
これにより、hostsファイルにホスト名が追加されます。ループバックIPとlocalhostへのマッピングとファイルの終わりの間に何も存在しないという固有の仮定がありますが、この行とファイルの終わりの間にIPv6のものがあります。あなたが望むもの。関連するコメント:このファイルまたは他のファイルを編集するにはsudoを使用する必要があり、修正しようとしているのはsudoです。sudoを実行できる必要があります。この場合、sudo -h hostnameを使用して、最初にファイルの権限を変更するか、昇格してファイルを編集できます。
シベッシュスマン

1
私は「sudo tee ..」できないのでこれは失敗しますが、これはトリックをしました: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
ロニー・エルフラインr11lein

31

これはこの質問への回答であり、これはこの質問と統合されていることに注意してください。

ホスト名(dave00-G31M-ES2L)はに表示されません/etc/hostsLこの行にan を追加します。

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:)を使用して、編集用のオフラインコピーを作成し、編集後にきれいに上書きします。
1

2
そしてここにもうsudo存在しないことを提案する別のものがありsudoます。sudo動作しません、先生。sudo: unable to resolve host ...
グリーン

@グリーン:いいえsudo?あなたが言及したエラーメッセージはsudoコマンドから来ます。おそらくあなたは何か違うことを意味していましたか?
トール

@Greenは問題なくsudo動作します。状態を保存することはできません(つまり、Lekensteynが別の場所で言ったように、毎回パスワードを入力する必要があります)。
ブレリン

4
W10のBashでこの問題があり、Googleからこの質問に来た場合、これが私にとって有効な答えです。127.0.0.1を「127.0.0.1 localhost DESKTOP-SLQK4CV」のように変更しました(「sudo vim / etc / hosts」を実行します(vim初心者のクイックヒント:入力する前にiを押して挿入モードに切り替え、escを押して終了します)それは、保存して終了するには「:wq」、保存せずに終了するには「:q!」と書いてください)、私の場合、sudoは機能しましたが、DESKTOP-SLQK4CVに接続できないと言っただけで、うまくいきました。
アベニュー

16

VPSでUbuntuを使用していたときにこの問題が発生しました。/ etc / hostsファイルを編集して解決しました。

次のコマンドを実行します:

sudo nano /etc/hosts

次に追加します:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

それがあなたの問題を解決することを願っています:)

PS:コンピューターを再起動することを忘れないでください!


1
また、端末名(@記号の後にターミナルのタイトルバーに表示)がhostsファイルの2行目の名前(Lucaの例では「ubuntu」)と一致するかどうかを確認します。最初の行は「localhost」でもかまいません。
ウォルディルレオンシオ

2
覚えて!sudoedit(またはsudo -e)を使用します。優先エディターを指定するには、EDITOR環境変数(例export EDITOR=vim:)を使用して、編集用のオフラインコピーを作成し、編集後にきれいに上書きします。
ヤン

11

/ etc / hostnameファイルと/ etc / hostsファイルのホスト名が一致しても、同じ問題が発生していました。

私のホスト名は「staging_1」でした。ホスト名にアンダースコアを使用できないことが判明したため、このエラーが発生していました。アンダースコアをハイフンに変更すると、問題が解決しました。


11

AWSで、vpcに移動し、「DNSホスト名」をオンにします。


2
askubuntuへようこそ!これについて少し拡張していただけますか?それは(少なくとも私には)あなたが何を意味するか十分に明らかではありません...
エルダーオタク

2
これが私を助けた答えでした。Amazon AWSは、最後に見たときから変わっていました。VPCにはDNSオプションがあり、DNS解決が機能する前にオンにする必要があります。
クリスムーア

1
有効DNSホスト名オプションは、VPCのエントリの右クリックメニューに(例えば)見つけることができます
マッテオScotuzzi

ありませんDNS Hostnames

7

質問で示される症状は、このより具体的な問題と強く相関している可能性があります。

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

これを解決するにはさまざまな方法がありますが、そのうちの1つはホスト名をlocalhostとして追加することです/etc/hosts(他のいくつかの回答に示されているように)。これは一般的に正しいことかもしれませんが、唯一の解決策ではありません。

「完全修飾ドメイン名」は、外部DNSサーバーなどによって提供される場合があります(ネットワーク上で利用可能な場合)。この場合、にsudoエントリがありませんが、文句を言いません/etc/hosts


注:sudo必ずしも必須ではありませんが、sudoersファイルのオプション機能により、ホスト名を間接参照しようとします。hostnameを検索しようとするsudoコマンドを参照してください。

遅延が長すぎない限り、このエラーメッセージは通常無害です。


やや高速:sudo --host=localhost
nobar


5

これと同じエラーメッセージが表示されました。AWS開発者フォーラムのこのディスカッションスレッドは、より良いソリューションだと思います。

「VPC管理コンソールに移動し、VPCを選択し、[アクション]をクリックし、[DNSホスト名の編集]を選択して、[はい]を選択します。」

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


5

一部のターミナルエミュレータは、エミュレータを閉じて再起動するまでプロンプトを正しいホスト名で更新しません(lxterminal、私はあなたに話している)。

ホスト名ホストファイルを編集して実行しsudo service hostname restartた後sudo hostname、プロンプトに古い値が表示されていたにもかかわらず、実行してホスト名が新しい値であることがわかるまで、このエラーと30分間戦いました。


1
問題はターミナルエミュレーターではなく、値をキャッシュしたシェルです。
マークストースバーグ

4

私の場合、それが問題だったので、使用できるパラメータがあるかどうかを知りたいのでに変更しhostnameましmanhostname。代わりに、それは私hostnameに変わりました、manそして、私はいつもあなたのような同じメッセージを得ました

sudo: unable to resolve host (none)

ホスト名を「localhost」に戻した後、すべてが再び正常に機能しました

hostname localhost

3

誰もが変更することをお勧めし/etc/hostsます。ただし、場合によってはこれが不可能な場合があります(たとえば、Dockerコンテナー内)。だから、私はより良い方法を見つけなければならなかったし、これを思いついた:

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

エイリアスはbashスクリプトでは機能しませんが、変数を使用できます。 sudo='sudo -h 127.0.0.1'


2

申し訳ありませんが、「ホストを解決できません」と表示されているので、実行してみてください:

hostname

そして、出力がマシンのホスト名かどうかを確認します。そうでない場合、問題はsudoではなくホスト構成にあります。


マシンのホスト名を取得しました。/ etc / hostsにもエントリがあります。まだエラーが発生します。
チャンドレッシュ

hostsファイルを変更した後、マシンを再起動しましたか?
animaletdesequia

いいえ。ITチームは、puppetlabsのロックファイルとgpgキーに問題があると述べましたが。現在、再起動せずに解決されました
。– chandresh

2

OPが書いた:

すべて/ etc / hostnameにありました。病気のサーバーの2つでは、次のようになりました。

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の名前を変更しましたが、hostsファイル内のマシン名は変更されませんでした。

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 / hostsファイルと/ etc / hostnameファイルを編集して解決しました。以下に示すように上部を編集するだけです。

#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
モスタファアハンガラ16年

2
/etc/hostsなしで編集するにはどうすればよいですかsudosudo動作しないsudo: unable to resolve host ...
グリーン

1

sudoを実行できない場合は、suを介してrootとしてログインできます。IE:su root(x-termで)。プロンプトが表示されたらrootパスワードを入力し、nanoでファイルを編集できます。'buntuのルートパスワードは、sudoに使用するパスワードと同じです。


5
Ubuntuのルートパスワードは、のパスワードと同じではありませんsudorootは独自のアカウントであり、デフォルトではパスワードが設定されていません。
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.