Как подключиться к ssh серверам по имени хоста без имени домена?

10

Мне нужно войти на несколько серверов на работе, чтобы выполнить свою работу. Я устал от ввода полного доменного имени сервера для доступа. Я вхожу / выходить через SSH в нашей собственной частной сети. Я на 99% уверен, что это в нашей собственной частной сети, потому что все серверы имеют ip addr 10.xyz. Есть ли способ использовать ssh на серверах, используя только имя хоста, а не имя домена?

У нас есть серверы в разных странах. Способ именования наших серверов очень длинный. Он называется следующим образом:

hostname.country.domainname.com

Я получаю кистевой туннель, набираю ssh me@hostname1.country.domainname.com

... каждый раз, когда я получаю доступ к одному из наших серверов. Если я нахожусь в США, и я пытаюсь получить доступ к другому хосту, который находится в США, я могу просто напечатать ssh me@hostname2и я подключаюсь нормально. Однако, если я нахожусь в США и пытаюсь подключиться к серверу в Англии, я не могу набрать ssh me@hostname3.engи подключиться к hostname3.

Обходной путь, который я сделал, установил псевдоним в моем файле ~ / .ssh / config для некоторых серверов. Однако я не думаю, что возможно добавить более 1000 серверов в этот файл. Я уже добавил более 20 серверов, и мои коллеги думают, что я сумасшедший, хотя я думаю, что они сумасшедшие из-за ввода полного доменного имени при поиске.

Есть ли простой способ для нас настроить что-то, чтобы нам не приходилось каждый раз вводить наш domainname.com?

Classified
источник

Ответы:

18

Вы можете использовать подстановочный знак и использовать %hв своей конфигурации

например

Host *.eng
  Hostname %h.domainname.com

Теперь, когда вы это сделаете, ssh foo.engон будет пытаться подключиться к foo.eng.domainname.com.

Вы также можете добавить другие параметры к этой конфигурации; например, принудительное имя пользователя

Host *.eng
  Hostname %h.domainname.com
  User me

Теперь, когда вы это сделаете, ssh foo.engон будет пытаться подключиться foo.eng.domainname.comкак пользователь me.

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(ну, очевидно, я получаю сообщение об ошибке, прежде чем это не допустимое имя хоста для меня!)

Так что теперь вам нужно только одно правило на страну.

Стивен Харрис
источник
Моей первой мыслью были псевдонимы DNS, второй был файл hosts, но я пропустил, что есть несколько серверов. Это решение выглядит отлично. Какой конфиг получает строки, которые вы опубликовали?
Ксалори
Это входит $HOME/.ssh/configили вы можете сделать это в масштабе всей системы/etc/ssh/ssh_config
Стивен Харрис
Это работает с user@*.eng?
Ксалори
3
С правилом, которое я написал, вы можете сделать, ssh foobar@somewhere.engи оно будет работать, как ожидалось. Все, что это делает, это переписать компонент имени хоста. Он будет работать даже с scpи sftpи так далее.
Стивен Харрис
9

Если вы добавите

search domainname.com

к /etc/resolv.conf, и использование hostname.country, ssh(и другие сетевые программы, в этом отношении) автоматически добавит domainname.comдля Вас 1 .

Я не думаю, что добавление доменов разных стран к вашему searchпути является хорошей идеей, потому что вы можете получить неожиданное поведение, если два сервера в двух разных странах используют одно и то же имя хоста. 2

Я считаю, что этот метод лучше, чем изменение sshконфигурации, потому что он позволяет hostname.countryрешать независимо от программы, которую вы используете ( telnet, VNC, ...).

Увидеть resolv.conf(5)


1 Точнее, он добавится, domainname.comесли не сможет решитьhostname.country сам.

2 В таком сценарии hostnameбудет разрешен сервер в стране, домен которой указан первым в searchпути.

Джозеф Р.
источник
2
Кстати, вы также можете сделать это без полномочий root и для каждого процесса с помощью переменной env LOCALDOMAIN. man resolv.conf
rudimeier
Это работает для разрешения хоста SSH, но если вы используете GSS / Kerberos, имена не будут совпадать, и аутентификация не удастся.
Ник Т
7

Вы могли бы использовать CanonicalDomains опцию в вашей конфигурации SSH.

Добавление следующего в ваш конфигурационный файл ssh заставит ssh попытаться добавить domainname.comк любому хосту, который имеет не более 1 точки в своем имени:

CanonicalizeHostname yes
CanonicalDomains domainname.com

С этим конфигом ssh foo.engсначала попробуем foo.eng.domainname.com, и отступим, foo.engесли хост не найден. Аналогично, ssh github.comсначала попробуюgithub.com.domainname.com , поэтому, если вы хотите подключиться к GitHub, ваш DNS-сервер не должен возвращать записи для несуществующих хостов.

CanonicalizeMaxDotsМожет быть использовано для управления , сколько точек могут появиться в имени хоста , прежде чем SSH считает полным и не добавляет domainname.com. по умолчанию он равен 1, что должно быть достаточно для вас, учитывая схему, которая у вас есть на данный момент, но если вы когда-нибудь доберетесь до чего-то подобного, hostname.city.countryвам придется увеличить его.

user2313067
источник