
Мне нужно войти на несколько серверов на работе, чтобы выполнить свою работу. Я устал вводить полное доменное имя сервера для доступа. Я вхожу/выхожу через 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
пути.