Вопрос или проблема
Я пытаюсь настроить сервер 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
и создания различных пользователей для каждого назначенного сервера. Это решение будет более понятным и управляемым. Ваши следующие шаги могут выглядеть следующим образом:
-
Создание Групп и Пользователей:
Определите группы и создайте пользователей для каждой группы. Например: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 для Пользователей:
В файле конфигурации 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-сервера, позволяя ограничить доступ на уровне пользователей и групп.