Linuxでホスト名をエイリアス化することは可能ですか?


90

Linuxでホスト名をエイリアス化することは可能ですか?

次のように、さまざまなUbuntuフォーラムでjmillikinから依頼されました。


ホスト名エイリアスを作成することはできますか?/ etc / hostsに似ていますが、IPアドレスではなく他のホスト名を使用しています。そのため、このようなファイルを使用して「fakehost1」にpingを実行すると、「realhost」に再マッピングされ、「realhost」がIPアドレスに解決されます。

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

誰かがsshについて答えましたが、pingなどについては答えませんでした。私の主な目的は、sshをSubversionサーバーのエイリアスとして使用することです。私の場合、realhostは動的IPアドレスの下にあります。そのため、「/ etc / hosts」エイリアスは機能しません。のsvn://my_svnserver/my_repos代わりに Subversionサーバーにアクセスしたいsvn://realhost/my_repos


私は何かを見逃しているのではないかと思います。/ etc / hostsを10.0.3.4 some.host.org another.domain.comのように見せることはできなかったと言っていますか?何らかのプログラム上の理由でリファレンスを使用する必要がありますか?
jim_m_somewhere

回答:


56

フォーラムにアカウントを持っていない(またはログインしたくない)場合:

主な問題がpingではなくsshである場合、〜/ .ssh / configを作成/編集して次のような行を追加できます。

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
ホスト名の部分は新しい行にある必要があります。以下に、このような構成ファイルの作成方法に関する優れたチュートリアルを示します。mattryall.net
Code Commander

1
良い回避策、ありがとう。しかし、もちろん、より良い解決策は、DNSでcnamesを使用することです
Yura

31

Linuxは、HOSTALIASES環境変数を設定することでエイリアシングをサポートしています。

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile

その後、できます

ping fakehost

NB pingでは、これをルートとして設定する必要がありますが、そのユーザーとして実行されるアプリケーションの任意のユーザーとして設定できます。rootにsuidをpingします。


3
Ubuntu 12.04で動作しませんでした:(
Dimitry K 14年

3
HOSTALIASESは、setuidフラグが設定されていない実行可能ファイルに対してのみ機能します。そのため、pingでは機能しません(pingを実行するときに既にrootである場合を除く)。これは、setuid-executableをだまして意図したものとは異なるホストに接続することを避けるために行われたと思います。
ボリス

1
また、カールでは動作しません
ベヌバード

7
期待される結果になることはめったにありません。 HOSTALIASESは、getaddrinfo(3)またはgethostbyname(3)を使用するアプリケーションでのみ機能します。これは、特定のシステムコールによって明示的にホスト名を解決しようとするアプリケーションで機能することを意味します。unix.stackexchange.com/questions/10438/を参照してください... 唯一の解決策はローカルDNS(dnsmasq)
Nadir

1
これはトリックだと思われますが非推奨です。gethostbyname *()、gethostbyaddr *()、herror()、およびhstrerror()関数は廃止されました。システムでDNSMasqをローカルで実行している場合、DNSを使用する任意の解決のためにエイリアスを作成できます。
テクノポール

24

DNSサーバーでこれを設定できます。CNAMEレコードを使用すると、マシンを複数のホスト名で認識できます。そのため、CNAMEレコードをDNSサーバーに次のように追加します。


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 


3
試すべきDNSサーバーは軽量ですdnsmasq(DHCPにも対応しています)。
sybreon

17

私はしばしば環境変数を使用してこれを行います。これはコマンドラインでのみ機能することは知っていますが、ホスト名エイリアスを欲しがっている場所です(複数のスーパーコンピューターアカウントで、すべて長いURLで作業していました)。BASHを使用している場合の例を次に示します。〜/ .bashrcの場合:

export fakehost = "long.ass.annoying.url.org"

次に、新しいシェルで:

ssh christopher @ $ fakehost


11

これを行う唯一の方法は、独自のローカルDNSサーバーがある場合です。


1
ええ、今それが唯一の解決策のようです。ありがとう。評判が足りないので、投票できません。

DSLまたはダイヤルアップ接続の刻々と変化するIPアドレスが問題である場合、dyndnsがより良いソリューションです。
スヴェン

いいえ、それはより良い解決策ではありません。サーバーが他の何かによって処理されるホスト名を持つと、OPが必要とするのは最初のホスト名のCNAMEだけです。DYNDNSなどは、ホストがIPが変更されたことをDNSサーバーに通知することに依存しています。

5

/etc/hosts.aliasesの使用は、バインドリゾルバーライブラリの標準機能です。/ etc / hostsにエントリを追加するよりも堅牢であり、DNSにCNAMESを追加できない場合(アクセスできません)に使用できます。

一般に、ベストプラクティスは、/ etc / resolv.confで定義された適切なSEARCHを使用してDNSでCNAMESを使用することです。

/ etc / hostsの更新は、IPの変更と同期を保つ必要があるため、あまり堅牢ではありません。これは、小規模でのみ、またはネームサービスを使用してホストマップを配布している場合(LDAP経由など)にのみ機能します。

別の解決策はDNSMasq http://en.wikipedia.org/wiki/Dnsmasqです


CENTOS 6で/etc/hosts.aliasesを使用しようとしましたが、この機能は機能していないようです。また、その使用または存在に関するドキュメントを見つけることもできません。どこを見ればいいの?
mdpc

5

現在のIPアドレスをホスト名にマップするdyndnsサーバーが必要です。ログインするたびにこのサーバーに現在のIPアドレスを通知すると、ホスト名レコードが更新されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.