Вопрос или проблема
На данный момент у меня есть два удаленных репозитория в 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
может не работать
-
Ошибки в командной строке: Убедитесь, что путь к команде
ping
, который вы используете в конфигурации, правильный. Попробуйте выполнить/usr/bin/ping -c1 192.168.1.1
в терминале, чтобы убедиться, что команда действительно выполняется успешно. -
Неправильная логика совпадения: Директива
!exec
означает «не выполнять», а это может привести к тому, что блокMatch
будет игнорироваться, если команда возвращаетfalse
. Еслиping
успешен, SSH не будет применятьproxyjump bastion
. -
Команда не выполняется: Если команда не выполняется корректно, это также может быть причиной, почему блок
Match
игнорируется. Попробуйте запустить простую команду, какexec true
, чтобы проверить, сработает лиMatch
. -
Проблема с сетевыми настройками: Может быть, сетевые настройки вашего внешнего доступа не позволяют выполнить
ping
. Убедитесь, что у вас достаточно прав и настройка firewalls не блокирует этот запрос. -
Кэширование SSH-клиента: SSH может кэшировать информацию о хостах. Попробуйте запустить команду с опцией
-o StrictHostKeyChecking=no
, чтобы увидеть, сработает ли ваша конфигурация. -
Ошибка в версии OpenSSH: Убедитесь, что версия OpenSSH, с которой вы работаете, не содержит ошибок, связанных с обработкой директив
Match
иexec
. Возможно, стоит обновить до последней версии.
Рекомендации
- Проверьте все вышеуказанные моменты по порядку.
- Попробуйте поэкспериментировать с использованием различных команд в секции
Match
, чтобы увидеть, реагирует ли SSH на другие команды. - Рассмотрите возможность использования более простого логического условия, например, просто
match host git
, для первоначальной отладки, а затем переходите к более сложным условиям.
Заключение
Конфигурация SSH может быть сложной, и проблемы с Match
и exec
могут быть вызваны многими факторами. Проверив приведенные выше моменты, вы сможете лучше понять, почему ваша конфигурация работает не так, как ожидается. Если после выполнения этих шагов проблема останется, возможно, стоит искать помощь на специализированных форумах или обратиться к документации OpenSSH.