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

Вы можете использовать expect, как описано здесь .

Он должен быть доступен в репозиториях всех основных дистрибутивов. Вы можете написать для него скрипты, а также один -лайнер, который вы можете найти здесь .

Вот также егоmanстраница , если хотите взглянуть.

И вот пример зацикливания в Expect.

10
23.03.2018, 18:44
3 ответа

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

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

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

18
27.01.2020, 19:59

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

search domainname.com

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

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

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

См. resolv.conf (5)


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

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

9
27.01.2020, 19:59

Вы можете использовать опцию 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, вам нужно будет увеличить его.

9
27.01.2020, 19:59

Теги

Похожие вопросы