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

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

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

У нас есть серверы в нескольких странах. Название наших серверов очень длинное. Оно имеет следующее название:

hostname.country.domainname.com

У меня начинается синдром запястного канала, когда я печатаю ssh [email protected]

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

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

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

решение1

Вы можете использовать подстановочные знаки и %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

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

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

решение2

Вы можете использовать эту 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вам придется увеличить это значение.

решение3

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

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пути.

Связанный контент