Все расширения происходят до выполнения команды. То, как команда интерпретирует полученные данные, зависит только от нее. Ни в одной из команд вашего примера нет никаких расширений - .
не расширяется оболочкой.
Команда git
использует .
после изменения каталогов в соответствии с вашими опциями, поэтому
не будет вашим текущим каталогом. Также tar
не будет архивировать мой текущий каталог в следующей команде:
tar -C etc -c .
Я предполагаю, что вы используете агент ssh -или что-то подобное для кэширования ваших расшифрованных закрытых ключей, что может изменить порядок, в котором предлагаются ключи. Это будет видно на более подробном уровне журнала (с несколькими-v
).
Кроме того, параметр IdentitiesOnly
имеет несколько иное значение, чем вы могли бы предположить. --он ограничивает ключи, которые будут предлагаться серверу, но не ограничивает их ключом, предшествующим параметру.В основном это используется, чтобы не предлагать удостоверения личности в месте по умолчанию, загружаемом автоматически(~/.ssh/id_{rsa,dsa,ecdsa,ed25519}
).
Параметр IdentitiyFile
также немного отличается от того, что вы предполагаете. Разрешается указывать несколько раз (, см. страницу руководства ), так что также будет использоваться тот, что указан в разделе Match *
.
Если вы хотите использовать какой-то ключ по умолчанию, а другой только для этого конкретного хоста, переместите ключ «по умолчанию» в папку по умолчанию ~/.ssh/id_rsa
и удалите его из файла конфигурации. Это должно решить ваши проблемы.
Недавно я столкнулся с этой же проблемой. Конфигурация хоста SSH допускает исключение, поэтому это будет делать то, что вы хотите (использовать один файл идентификации каждый, кроме псевдонима bitbucket.com)
Host bitbucket-personal
HostName bitbucket.com
User git
IdentityFile ~/.ssh/personal
IdentitiesOnly yes
Host * !bitbucket-personal
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/work
На справочной странице для ssh _config (для некоторой версии )указано, что используется первый набор значений, что, похоже, подразумевает, что исходная конфигурация должна работать. Но я обнаружил, что это исключение необходимо (для ssh в OSX, ssh -VOpenSSH_8.1p1, LibreSSL 2.7.3
)