Могу ли я настроить Ubuntu для добавления домена в конец запроса имени хоста ssh?


9

У меня много серверов, и все они заканчиваются одним и тем же server.company.net, например, vded-xx-001.servers.company.net, и мне было интересно, можно ли это сделать, чтобы я мог просто набрать vded- xx-001 и он автоматически добавляет серверы.company.net?

Так что я хотел бы напечатать

ssh user@vded-xx-001

и это на самом деле подключиться к

ssh user@vded-xx-001.servers.company.net

Я попытался установить свой домен DNS-поиска для Servers.company.net, в / etc / network / interfaces, но это не дало желаемого результата.

Кто-нибудь может указать мне правильное направление?

заранее спасибо


Есть ли причина, по которой вы не можете просто добавить search company.net/etc/resolv.conf?
Хеннес

@Hennes Добавление поиска company.net и servers.company.net к resolv.conf сработало. Однако в верхней части файла есть предупреждение, что мои изменения будут перезаписаны, если это так, как мне сделать их постоянными?
Тим Лесси Фриборн

1
Я хотел бы ответить на это и получить рейк в дополнительном повторении, но этот пост уже достаточно хорошо на это отвечает: :-) askubuntu.com/questions/157154/…
Hennes

На самом деле, вопреки тому, что обсуждается в этом вопросе, обычно лучше включить список доменов поиска либо в /etc/network/interfaces(используя dns-searchопцию), либо в поле конфигурации соединения NetworkManager Search domains.
Jdthood

Вместо того, чтобы возиться с конфигурацией локального распознавателя, это решение является более простым и переносимым.
OrangeDog

Ответы:


19

Возможно, вы уже решили это, но, возможно, позже это может кому-то помочь: вам не нужно возиться с вашим resolv.conf, просто можете использовать что-то вроде этого в вашем ~/.ssh/config:

Host vded-*-001 test-*-something-fixed-*
        HostName %h.servers.company.net
        User someusername

Так что позже вы можете просто использовать:

ssh vded-alotofstuff-001
ssh vded-somethingels-001
ssh test-02-something-fixed-somethingelse

Это должен быть принятый ответ.
SLM

Это способ решить проблему, но не решает проблему разрешения имен в масштабе всей системы, он решает проблему только для имен хостов ssh. Для меня лучше всего иметь возможность получить правильное имя хоста в масштабе всей системы и не нужно настраивать конкретный сервис (ssh) для разрешения определенных имен хостов
Филипп Гачу

1
На всякий случай, если я забуду и снова посмотрю это позже, если вы хотите разрешить как короткие, так и длинные имена при совместном использовании одной и той же конфигурации, просто укажите 1-ую запись Host vded-*.servers.company.netс помощью Hostname %h. Затем во второй записи Host vded-*со Hostname %h.servers.company.netвсеми другими параметрами, такими как User, IdentityFile и т. Д.
bksunday

6

Это самое простое решение. Он работает для всех хостов, не требует root или доступа к каким-либо системам DNS / resolver.

Добавьте в начало вашего ~/.ssh/configфайла (или создайте, если он еще не существует):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

Документация ( man 5 ssh_config):

CanonicalizeHostname

Управляет выполнением явной канонизации имени хоста. По умолчанию нет , не выполнять перезапись имен и позволить системному распознавателю обрабатывать все запросы на поиск имени хоста. Если установлено в да , то для соединений , которые не используют ProxyCommand , SSH будет пытаться канонизировать имя хоста , указанное в командной строке с помощью CanonicalDomains суффиксов и CanonicalizePermittedCNAMEs правила. Если для CanonicalizeHostname задано значение Always , канонизация также применяется к прокси-соединениям.

Если эта опция включена, то файлы конфигурации обрабатываются снова, используя новое целевое имя, чтобы выбрать любую новую конфигурацию в соответствующих строках Host и Match .


Это работает лучше всего для меня. Вам не нужно добавлять CanonicalDomains, только 1-й ряд. Таким образом, это работает, даже если вы подключаетесь к другим сетям.
Адам Уолнер

2
@ AdamWallner, если вы не добавите CanonicalDomainsего, он будет работать только в поисковом домене текущей сети. Если вы сделаете (и можете перечислить несколько), то это будет работать для разрешения всех этих имен хостов в любой сети, к которой вы можете подключиться.
OrangeDog

@ deed02392 это именно то, что он делает, как говорится в документации.
OrangeDog

2

Да, вы можете сделать это, создав файл конфигурации с именем ~/.ssh/configи введя следующее содержимое:

Host vded-xx-001
User user
Port 22
HostName vded-xx-001.servers.company.net

Теперь вам нужно просто напечатать это (вам даже не нужно имя пользователя):

$ ssh vded-xx-001

Это также работает с утилитой командной строки scp:

$ scp filename vded-xx-001:/path/

1
Я знаю, что это работает для отдельных хостов, но у меня их сотни, и я надеялся, что смогу создать правило, которое использует VDED- *, а затем для имени хоста работает host.servers.company.net
Тим Лесси Фриборн

1
@TimLassieFreeborn: вы можете написать скрипт, который генерирует записи, необходимые для файла конфигурации. Я не знаю, можете ли вы сделать это динамически, хотя.
Flimm

@TimLassieFreeborn см. Мой ответ
OrangeDog

2

Решением моей проблемы было добавить поисковый домен в resolv.conf:

search servers.company.net

Это позволило мне войти

ssh user@vded-xx-001

для любого из моих серверов, и он подключается к правильному адресу.

Спасибо @Hennes за ответ


2
Предполагая, что вы работаете в Ubuntu 12.04 или более поздней версии, вы не должны редактировать /etc/resolv.conf напрямую, потому что утилита resolvconf создает этот файл. (На самом деле он генерирует /run/resolvconf/resolv.conf, для которого /etc/resolv.conf является символической ссылкой.) Вместо этого вы должны настроить параметры DNS через конфигуратор интерфейса, ifup или NetworkManager. Ifup : отредактируйте / etc / network / interfaces и добавьте dns-search servers.company.netстроку в раздел для внешнего сетевого интерфейса устройства. NM : Добавьте servers.company.netв Search domainsполе на вкладке IPv4 для подключения.
Jdthood

Если на вашем компьютере /etc/resolv.confнет символьной ссылки, ../run/resolvconf/resolv.confзапустите, sudo dpkg-reconfigure resolvconfчтобы восстановить символическую ссылку.
Jdthood

1

Если вы используете SSH-идентификаторы - и с таким количеством серверов это стоит посмотреть - тогда, как сказал OrangeDog, установка CanonicaliseHostname и CanonicaliseDomains также разрешит совпадение с записью @ cert-Authority на ваших известных хостах.

known_hosts entry @ cert-author * .example.com ssh-rsa AAAddadfkjaeio ...

без опций Canonicalise вам нужно будет использовать "ssh host.example.com"

С опциями Canonicalise "ssh myhost" будет соответствовать.

Я бы добавил это как комментарий к ответу OrangeDogs, если бы представитель позволял ...


0

Для быстрого решения, которое работает в разных программах, вы также можете настроить vded-xx-001перенаправление домена на определенный IP-адрес, изменив /etc/hostsстроку так:

173.194.41.90  vded-xx-001

Это работает в вашем браузере: http://vded-xx-001/

Как и с утилитами командной строки, такими как SSH:

$ ssh user@vded-xx-001

(Я лично предпочитаю конфигурационное решение SSH, хотя.)


0

Для общесистемного разрешения доменных имен мне нравится настраивать один раз в моей сети. Таким образом, я установил в DHCP-сервере имя домена и DNS-сервер, чтобы он давал всем машинам право, resolv.confвключая

  • IP основного DNS-сервера
  • Домен
  • директива поиска

Это зависит от DHCP-сервера и конфигурации сети, которую вы хотите ... Мне лично не нравятся пользовательские настройки компьютера, когда это что-то общее для сети

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.