Настройка конфигурации SSH: установка пользователя по умолчанию для нескольких хостов под одним и тем же доменом и псевдонимами

Вопрос или проблема

Эта тема: В вашем ssh конфиге возможно ли иметь одну запись хоста для нескольких машин на одном домене объяснила часть моего вопроса, касающуюся ‘псевдонимов’. Мне было интересно, возможно ли установить имя пользователя по умолчанию, а также использовать доменные псевдонимы, чтобы я мог просто написать что-то вроде:

ssh subdomain

У меня есть следующее в файле /etc/resolv.conf:

search my_cool_domain.com

И следующее в файле ssh_config:

Host *.my_cool_domain.com
    User deploy

Таким образом, я думал, что следующее сработает:

ssh subdomain

попытается подключиться к subdomain.my_cool_domain.com с пользователем deploy, но почему-то это не срабатывает.

Хотя следующее:

ssh deploy@subdomain работает, а также:
ssh subdomain.my_cool_domain.com

Есть ли идея, как я могу это исправить (если это вообще возможно) элегантным образом?

Шаблоны после ключевого слова “Host” не разрешаются в реальные имена хостов, поэтому вы не можете определить, что поддомен, для которого настроен ваш dns-запрос, на самом деле является поддоменом вашего основного домена.

Из man-страницы ssh_config –

         ... Хост - это аргумент имени хоста, указанный в командной строке (т.е. имя не преобразуется в канонизированное имя хоста перед сопоставлением).

Ваша альтернатива – это либо

  1. Использовать “Host *” и установить имя пользователя по умолчанию для всех хостов.
  2. Когда/если у вас есть какие-либо префиксы к вашим поддоменам, используйте “Host pfx1* pfx2*”.
  3. Настроить автозавершение командной оболочки и всегда использовать полные имена хостов, “Host *.mydomain” и “ssh subdomain”, который будет завершаться до “ssh subdomain.mydomain”.
  4. Также можно использовать псевдонимы оболочки и функции, чтобы автоматически добавлять часть “.mydomain”. Например, “ssh-alias subdomain”, который является псевдонимом для “ssh subdomain.mydomain”.

просто используйте комбинированное решение с правильно настроенными ssh_config + resolv.conf:

1. настройте /etc/resolv.conf

search my_cool_domain.com

2. настройте ваш ssh_config для отображения между хостами и пользователями

Host subdomain1
    User deploy1

Host subdomain2
    User deploy2

Таким образом, ssh subdomain1 будет использовать требуемого пользователя deploy1, и хост будет квалифицирован по его полному имени через resolv.conf

Я думаю, в вашем конкретном сценарии вам может понадобиться только добавить CanonicalizeHostname yes в верхней части вашего конфига. Но если вы не хотите этого делать:

Просто добавьте две строки внизу вашего ~/.ssh/config:

Match originalhost "!*.*,*"
    Hostname %h.my_cool_domain.com
    User deploy

Это перенастроит любые хосты, для которых у вас нет существующей записи, и которые не имеют точки (.) в имени хоста. Нет необходимости возиться с /etc/resolv.conf

Ответ или решение

Для настройки SSH-кофигурации, которая позволяет использовать стандартное имя пользователя для нескольких хостов в рамках одного домена, а также позволяет использовать алиасы, можно использовать конструкцию файла конфигурации SSH и настройки системы DNS. Ваша задача включает в себя возможность подключения к поддоминам без необходимости указывать полное имя хоста и пользователя каждый раз, когда вы хотите осуществить подключение. Рассмотрим, как это можно сделать.

Контекст

Вы уже настроили в файле /etc/resolv.conf следующее:

search my_cool_domain.com

И в файле конфигурации SSH (~/.ssh/config) у вас есть такие строки:

Host *.my_cool_domain.com
    User deploy

Это подразумевает, что при использовании команды:

ssh subdomain

SSH попытается выполнить подключение к subdomain.my_cool_domain.com с пользователем deploy. Однако, в вашем случае это не работает, так как SSH обрабатывает имена хостов без разрешения на уровне DNS.

Проблема

Как было указано в обсуждении, шаблоны после ключевого слова Host не разрешаются в реальные имена хостов. Таким образом, функционал, который вы стремитесь реализовать, требует немного другой настройки.

Решение

Для достижения желаемого результата вы можете использовать несколько подходов:

1. Прямое указание поддоменов

Если у вас имеется фиксированное количество поддоменов, вы можете явно указать их в конфигурации:

Host subdomain1
    User deploy1

Host subdomain2
    User deploy2

Таким образом, при вводе ssh subdomain1 будет использоваться пользователь deploy1, и при этом SSH автоматически подставит домен, благодаря вашей настройке в resolv.conf.

2. Шаблонная конфигурация с Match

Если вы хотите более универсальное решение, вы можете использовать секцию Match в вашем ~/.ssh/config:

Match originalhost "!*.*,*"
    Hostname %h.my_cool_domain.com
    User deploy

Такой подход позволяет перенаправлять все запросы к хостам без точки в названии (то есть поддоменам), автоматически добавляя суффикс вашего домена и устанавливая стандартного пользователя deploy.

3. Использование полной конфигурации

Вы также можете включить настройку CanonicalizeHostname, если она подходит для вашей инфраструктуры:

CanonicalizeHostname yes

Это позволит SSH автоматически преобразовывать указанные вами имена в полные имена, однако может привести к путанице в определенных сценариях, поэтому стоит применять это с осторожностью.

Дополнительные улучшения

  • Алиасы в оболочке: Вы можете настроить свои алиасы в оболочке для упрощения команд:
alias sshsub="ssh subdomain.my_cool_domain.com"
  • Использование оболочечных функций: Напишите небольшую функцию, которая добавляет домен автоматически:
function sshmy() {
    ssh $1.my_cool_domain.com
}

Заключение

Эти рекомендации помогут вам настроить SSH-кофигурацию для работы с поддоменами и алиасами в вашем домене, что облегчит процесс подключения к различным серверам. Выбор между явным указанием хостов, использованием шаблонов или расширенных настроек SSH полностью зависит от ваших требований и личных предпочтений. Не бойтесь экспериментировать с конфигурацией, чтобы найти наиболее подходящий для вас вариант.

Оцените материал
Добавить комментарий

Капча загружается...