Вы можете использовать expect
, как описано здесь .
Он должен быть доступен в репозиториях всех основных дистрибутивов. Вы можете написать для него скрипты, а также один -лайнер, который вы можете найти здесь .
Вот также егоman
страница , если хотите взглянуть.
И вот пример зацикливания в Expect.
Вы можете использовать подстановочный знак и использовать % 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
(ну, очевидно, я получаю сообщение об ошибке, потому что это не действительное имя хоста для меня!)
Итак, теперь вам нужно только одно правило для каждой страны.
Если вы добавите
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 В таком сценарии имя хоста
будет преобразовано в сервер в стране, домен которой указан первым в пути поиска
.
Вы можете использовать опцию 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
, вам нужно будет увеличить его.