SSH конфигурация хоста сопоставление порта

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

У меня есть сервер, на котором запущены несколько “SSH-демонов” (фактически Stash и OpenSSH), для каждого из которых необходимы разные SSH-ключи. Эти демоны прослушивают 2 разных порта.

В конфигурации SSH на клиентских машинах (конкретно в ~/.ssh/config) возможно ли указать порт в директиве Host/Match (или каким-то другим способом), чтобы я мог переопределять IdentityFile в зависимости от порта? Таким образом, ssh myserver -p 22 и ssh myserver -p 23 оба будут входить, используя правильные ключи, без дополнительной конфигурации.

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

Match host somehost exec "test %p = 42"
IdentityFile ...

Приведенный выше пример применит строку “IdentityFile” только в том случае, если целевой хост – “somehost” и целевой порт – 42. Match работает так же, как Host, в том смысле, что строки, следующие за ним (до следующей строки Match или Host), применяются только к сессиям, которые соответствуют критериям. В примере строка Match проверяет, что хост – “somehost”, и также выполняет внешнюю команду, которая считается соответствующей, если команда завершилась с кодом 0.

Команда, выполняемая здесь, – test %p = 42. “%p” будет заменен на значение порта, которое ssh использует до этого момента (либо значение по умолчанию 22, либо значение из командной строки). test также известен как [; это утилита командной строки, в основном используемая в оболочках как часть оператора if. Здесь test используется для проверки, является ли номер порта 42.

Ключевое слово Match было добавлено в OpenSSH в версии 6.5 или 6.6. Проверьте вашу страницу man для ssh_config, чтобы узнать, доступно ли оно на вашей системе.

Вы можете создать “псевдонимы” хостов в вашем файле ~/.ssh/config, которые будут ссылаться на SSH-демоны на разных портах одного и того же сервера. Например:

Host daemon1
HostName host.domain.com
Port 22
IdentityFile ~/.ssh/id_rsa_daemon1

Host daemon2
HostName host.domain.com
Port 23
IdentityFile ~/.ssh/id_rsa_daemon2

Тогда вы сможете выполнить ssh daemon1 или ssh daemon2, чтобы войти в конкретный SSH-демон.

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

Конфигурация SSH: сопоставление хоста и порта

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

Основы конфигурации SSH

SSH-клиент использует файл конфигурации, находящийся в директории ~/.ssh/config, для настройки параметров подключения. В этом файле вы можете указать специфические настройки для отдельных хостов, включая имя хоста, порт и файл идентификации (ключ). Пример конфигурации для двух демонов, работающих на портах 22 и 23, может выглядеть следующим образом:

Host daemon1
    HostName host.domain.com
    Port 22
    IdentityFile ~/.ssh/id_rsa_daemon1

Host daemon2
    HostName host.domain.com
    Port 23
    IdentityFile ~/.ssh/id_rsa_daemon2

Теперь для подключения к каждому демону достаточно ввести команды ssh daemon1 или ssh daemon2.

Использование директивы Match

Однако если вы хотите использовать одно имя хоста с различными портами и при этом задать разные файлы ключей, вы можете воспользоваться директивой Match. Этот подход позволяет создавать более гибкие условия для настройки. Пример использования может выглядеть следующим образом:

Host myserver
    HostName host.domain.com

Match host myserver exec "test %p = 22"
    IdentityFile ~/.ssh/id_rsa_daemon1

Match host myserver exec "test %p = 23"
    IdentityFile ~/.ssh/id_rsa_daemon2

В данном случае директива Match проверяет, какой порт используется при подключении к myserver, и в зависимости от этого применяет соответствующий файл ключа. Команда test %p возвращает 0 (успех), если порт соответствует указанному значению.

Совместимость с версиями SSH

Обратите внимание, что директива Match была добавлена в OpenSSH начиная с версии 6.5 или 6.6. Перед использованием этой функции обязательно проверьте вашу версию OpenSSH с помощью команды ssh -V и документации (man ssh_config).

Резюме

Корректная настройка вашего SSH-клиента с использованием директив Host и Match позволяет значительно упростить процесс подключения к серверам с несколькими SSH-демонами. Вы сможете логироваться в каждый демон, используя правильные ключи, просто запуская одну и ту же команду с разными портами.

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

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

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