Як ssh на сервери внутрішньо по імені хоста без доменного імені?


10

Мені потрібно зайти на кілька серверів на роботі, щоб виконати свою роботу. Я втомився вводити FQDN сервера для доступу. Я входжу / виходжу через ssh в нашій приватній мережі. Я на 99% впевнений, що це у нашій приватній мережі b / c, всі сервери мають 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+ серверів, і мої колеги вважають, що я божевільний, хоча я вважаю, що вони божевільні, щоб набрати FQDN під час обходу.

Чи є для нас простий спосіб налаштувати щось так, що нам не доведеться вводити наш доменне ім’я кожен раз?

Відповіді:


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, друга - файл хостів, але я пропустив, що там є кілька серверів. Це рішення виглядає чудово. Який конфігурація отримує розміщені вами рядки?
Xalorous

Це входить, $HOME/.ssh/configабо ви можете зробити його широким у системі/etc/ssh/ssh_config
Стівен Харріс

Чи працює це user@*.eng?
Xalorous

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

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