Чи можливо псевдонім ім'я хоста в Linux?


90

Чи можливо псевдонім ім'я хоста в Linux?

Про це jmillikin просив на різних форумах Ubuntu наступним чином:


Чи можливо створити псевдонім імені хоста? Сорт як / etc / hosts, але з іншими іменами хостів, а не IP-адресами. Так що при такому файлі, як цей, ви могли б ping "fakehost1", і він буде переглянуто на "realhost", і тоді "realhost" буде вирішено на IP-адресу.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Хтось відповів про ssh, але не про ping тощо. Моє головне призначення - використовувати його як псевдонім для Subversion- сервера. У моєму випадку realhost знаходиться під динамічною IP-адресою. Отже, псевдонім "/ etc / hosts" не працює. Я хочу отримати доступ до свого сервера Subversion як svn://my_svnserver/my_reposзамість цього svn://realhost/my_repos.


Я здогадуюсь, що я можу щось пропустити. Ви кажете, що / etc / hosts не могли виглядати як 10.0.3.4 some.host.org another.domain.com Вам потрібно використовувати посилання з якихось програмних причин?
jim_m_s десь

Відповіді:


56

Для тих, хто не має облікового запису на форумах (або не бажає входити):

якщо ваша головна проблема не в ping, а в ssh, ви можете створити / відредагувати свою ~ / .ssh / config, додавши такі рядки:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
Частина імені хоста повинна бути в новому рядку. Ось хороший підручник про те, як зробити такий конфігураційний файл: mattryall.net/blog/2008/06/ssh-favourite-hosts
Командир коду

1
хороший спосіб вирішення, дякую. Але звичайно, кращим рішенням буде використання імен на dns
Юра

31

Linux підтримує псевдонім шляхом встановлення змінної HOSTALIASES env.

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

тоді можна

ping fakehost

NB ping вимагає, щоб ви встановили це як root, але ви можете це зробити як будь-який користувач для будь-якої програми, яка працює як цей користувач. ping suids до коріння.


3
не працював для мене на Ubuntu 12.04 :(
Dimitry K

3
HOSTALIASES працює лише для виконуваних файлів, на яких не встановлено встановлений прапор. Таким чином, він не буде працювати для ping (якщо ви вже не root під час виконання ping). Я думаю, що це робиться для того, щоб уникнути хитріння встановлених файлів із встановленням встановлених файлів у підключенні до іншого хоста, ніж він мав намір.
Борис

1
Також не працює для завивки
Benubird

7
це рідко виявиться очікуваним результатом. HOSTALIASES працює лише для програм, що використовують getaddrinfo (3) або gethostbyname (3) - Це означає, що він буде працювати для додатків, які намагаються чітко вирішити ім'я хоста за допомогою конкретного системного виклику: це ніколи не буває. дивіться unix.stackexchange.com/questions/10438/…, тому єдиним рішенням є місцеві dns (dnsmasq)
Надір

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
Так, зараз це здається єдиним рішенням. Дякую. Не можу подати заявку, оскільки у мене недостатньо репутації.

Якщо постійно змінюється IP-адреса DSL або комутованого з'єднання є проблемою, dyndns є кращим рішенням, IMHO.
Свен

Ні, це не краще рішення. Після того, як у сервера є ім'я хоста, яким обробляється щось інше, тоді всі ОП потребують CNAME для першого імені хоста. DYNDNS і подібне покладаються на хоста, який повідомляє dns-сервер, що його ip змінилося.
theterreceive

5

Використання /etc/hosts.aliases є стандартною особливістю бібліотек роздільної здатності прив'язки. Це надійніше, ніж додавати записи до / etc / hosts, і його можна використовувати, якщо ви не можете додати CNAMES до свого DNS (не маєте до нього доступу).

Як правило, найкраща практика - це використовувати CNAMES у DNS з відповідним ПОШУК, визначеним у /etc/resolv.conf.

Оновлення / etc / hosts не дуже надійне, оскільки записи повинні зберігатися синхронізовано зі змінами IP. Це реально працює лише в невеликому масштабі або коли ви використовуєте службу імен для розповсюдження карти хостів (наприклад, через ldap).

Іншим рішенням може бути DNSMasq http://en.wikipedia.org/wiki/Dnsmasq


Я спробував використовувати /etc/hosts.aliases в CENTOS 6, але ця функція, здається, не працює. Я також не можу знайти жодної документації щодо його використання чи існування. Де я повинен шукати?
mdpc

5

Вам знадобиться сервер dyndns, який буде відображати поточну IP-адресу на ім'я хоста. Ви будете повідомляти цьому серверу про свою поточну IP-адресу щоразу, коли ви ввійдете в систему, і він оновить запис вашого імені хоста.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.