SSH Match EXEC, по видимости, не имеет эффекта.

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

На данный момент у меня есть два удаленных репозитория в git, один указывает на git, когда я дома, и другой указывает на git-ext, когда я в away. Я хочу упростить это. Ниже приведена конфигурация ssh, которая работает как с git, так и с git-ext (обратите внимание, что оператор match закомментирован). Если я раскомментирую блок match, судя по всему, поведение блока git не изменится. Когда я дома, он работает, когда я в away, не работает.

Не имеет значения, использую ли я exec или !exec. Ничего, по сути, не меняется. Я не уверен, что происходит, но, по моему мнению, exec на самом деле не запускается. Буду признателен за любую помощь.

Это работает из Windows WSL2, Debian 11, OpenSSH_8.4p1, хотя я также пробовал на своем ноутбуке с linux, работающем под управлением Debian 12, с теми же результатами.

host git
  hostname 192.168.1.10
  user git
  identityfile ~/.ssh/id_rsa_git

#match host git !exec "/usr/bin/ping -c1 192.168.1.1"
#  proxyjump  bastion

host example.com
  hostname example.com
  user user
  identityfile ~/.ssh/id_rsa_cloud

host bastion
  hostname 192.168.1.5
  user jump
  identityfile ~/.ssh/id_rsa_bastion
  proxyjump  example.com

host git-ext
  hostname 192.168.1.10
  user git
  identityfile ~/.ssh/id_rsa_git
  proxyjump  bastion

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

Вопрос: SSH Match EXEC по сути не работает

Введение

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

Объяснение конфигурации

С учетом ваших замечаний, у вас есть две конфигурации SSH для доступа к различным удалённым репозиториям Git. Ваша текущая конфигурация выглядит следующим образом:

host git
  hostname 192.168.1.10
  user git
  identityfile ~/.ssh/id_rsa_git

#match host git !exec "/usr/bin/ping -c1 192.168.1.1"
#  proxyjump  bastion

host example.com
  hostname example.com
  user user
  identityfile ~/.ssh/id_rsa_cloud

host bastion
  hostname 192.168.1.5
  user jump
  identityfile ~/.ssh/id_rsa_bastion
  proxyjump  example.com

host git-ext
  hostname 192.168.1.10
  user git
  identityfile ~/.ssh/id_rsa_git
  proxyjump  bastion

Директива Match предназначена для изменения конфигурации в зависимости от определённых условий. В вашем случае, вы хотите использовать команду ping для определения доступности хоста по адресу 192.168.1.1.

Причины, по которым Match EXEC может не работать

  1. Ошибки в командной строке: Убедитесь, что путь к команде ping, который вы используете в конфигурации, правильный. Попробуйте выполнить /usr/bin/ping -c1 192.168.1.1 в терминале, чтобы убедиться, что команда действительно выполняется успешно.

  2. Неправильная логика совпадения: Директива !exec означает «не выполнять», а это может привести к тому, что блок Match будет игнорироваться, если команда возвращает false. Если ping успешен, SSH не будет применять proxyjump bastion.

  3. Команда не выполняется: Если команда не выполняется корректно, это также может быть причиной, почему блок Match игнорируется. Попробуйте запустить простую команду, как exec true, чтобы проверить, сработает ли Match.

  4. Проблема с сетевыми настройками: Может быть, сетевые настройки вашего внешнего доступа не позволяют выполнить ping. Убедитесь, что у вас достаточно прав и настройка firewalls не блокирует этот запрос.

  5. Кэширование SSH-клиента: SSH может кэшировать информацию о хостах. Попробуйте запустить команду с опцией -o StrictHostKeyChecking=no, чтобы увидеть, сработает ли ваша конфигурация.

  6. Ошибка в версии OpenSSH: Убедитесь, что версия OpenSSH, с которой вы работаете, не содержит ошибок, связанных с обработкой директив Match и exec. Возможно, стоит обновить до последней версии.

Рекомендации

  • Проверьте все вышеуказанные моменты по порядку.
  • Попробуйте поэкспериментировать с использованием различных команд в секции Match, чтобы увидеть, реагирует ли SSH на другие команды.
  • Рассмотрите возможность использования более простого логического условия, например, просто match host git, для первоначальной отладки, а затем переходите к более сложным условиям.

Заключение

Конфигурация SSH может быть сложной, и проблемы с Match и exec могут быть вызваны многими факторами. Проверив приведенные выше моменты, вы сможете лучше понять, почему ваша конфигурация работает не так, как ожидается. Если после выполнения этих шагов проблема останется, возможно, стоит искать помощь на специализированных форумах или обратиться к документации OpenSSH.

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

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