ssh ForceCommand с Match

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

Я пытаюсь настроить сервер ssh, который будет выступать в качестве промежуточного хоста для других серверов, доступных через ssh. Для этого я использую ForceCommand следующим образом:

Match Group g_ssh
ForceCommand nc -q0 my_internal_server 22

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

Match Group g_ssh Host my_internal_server
ForceCommand nc -q0 my_internal_server 22
Match Group g_ssh Host my_2_int_server
ForceCommand nc -q0 my_2_int_server

Но это не сработало. Это не работает из-за неработающей директивы Host.

Я также пробовал:

Match Host my_internal_Server
ForceCommand nc -q0 my_internal_server 22

Это тоже не сработало.

Есть ли какие-либо предложения о том, как использовать Match Host с Group?

Вы не можете сопоставить целевой хост — входящее соединение не будет знать ничего об этом.

Если вы посмотрите на текст моего ответа https://superuser.com/a/392717/19223, то первый пункт говорит о файле user .config, а второй пункт говорит о файле server sshd_config.

В конечном итоге я бы рекомендовал использовать Match Group и создавать различных пользователей для каждой цели. Что-то вроде

Match Group group1 
    ForceCommand nc -q0 my_internal_server 22

Match Group group2
    ForceCommand nc -q0 my_2_int_server 22

Затем создайте разных пользователей, например, user_1, принадлежащего group1, и user_2, принадлежащего group2. Затем в файле .ssh/config пользователей:

Host internal_server_1
    ProxyCommand ssh -q server
    User user_1
Host internal_server_2
    ProxyCommand ssh -q server
    User user_2

Таким образом, пользователь может использовать

ssh internal_server_1

не беспокоясь о именах пользователей и целевых хостах.

Не забудьте создать учетную запись пользователя на вашем главном сервере для каждой учетной записи user_1, user_2 и поместить туда правильный SSH-ключ.

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

Использование SSH ForceCommand с Match в Конфигурации Сервера

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

Проблема с Директивами Host и Match

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

Альтернативное Решение

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

  1. Создание Групп и Пользователей:
    Определите группы и создайте пользователей для каждой группы. Например:

    Match Group group1
       ForceCommand nc -q0 my_internal_server 22
    
    Match Group group2
       ForceCommand nc -q0 my_2_int_server 22

    В данном случае, вы создаете две группы пользователей, где user_1 будет принадлежать group1, а user_2 будет частью group2.

  2. Конфигурация SSH для Пользователей:
    В файле конфигурации SSH (~/.ssh/config) каждого пользователя вы можете определить назначения для подключения к серверам:

    Host internal_server_1
       ProxyCommand ssh -q -W %h:%p server
       User user_1
    
    Host internal_server_2
       ProxyCommand ssh -q -W %h:%p server
       User user_2

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

    ssh internal_server_1

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

Заключение

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

Использование такой стратегии не только упрощает управление доступом, но и повышает безопасность вашего SSH-сервера, позволяя ограничить доступ на уровне пользователей и групп.

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

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