Что может привести к игнорированию изменений .ssh/config

Что может привести к игнорированию изменений .ssh/config

У меня был ~/.ssh/configфайл, который работал нормально. Он был в таком формате:

Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 5000
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain

(у него было гораздо больше доменов, но давайте пока проигнорируем их)

Он работал отлично, даже в руководстве говорилось, что более конкретные шаблоны хостов должны быть сверху, так он всегда работал отлично. Я всегда подключался по ssh к этим двум доменам, и правильные ключи идентификации подбирались просто отлично. У меня никогда не было проблем, когда к этим двум доменам пытались применить ключ null. И я использовал это годами. Всегда получал правильного пользователя и ключ. Я использовал этот же файл конфигурации и на Debian, и на Fedora, и на OSX.

Сегодня на osx 10.10 (OpenSSH_6.2p2, OSSLShim 0.9.8r 8 декабря 2011 г.), которая работала раньше, я попытался также добавить User unkownправило *вверху. и внезапно, теперь каждый раз, когда я пытаюсь подключиться к ssh, ssh отправляет user=unkown и identityfile=id_null, что не позволяет войти в систему. Это заставило меня прочитать страницу руководства для ssh_config и оставить все точно по книге... и это все равно не работает. Я также попытался удалить запись Userиз, *но это не исправило ситуацию.

мой текущий .ssh/configфайл

Host exact.hostname.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain
Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 50

он все равно попытается использовать id_null в качестве файла идентификации, когда я ssh exact.hostname.domain.com. Я также пробовал использовать множественный шаблон и есть Host *.domain.com exact.hostname.domain.comвместо повторения. Ничего не работает. Есть идеи, что там не так?

Как можно задать параметры по умолчанию Userи IdentityFileпереопределить их для каждого домена?


правка 1: я добавил Host exact.hostname.domain.comк обеим частям до и после единицы *и ssh -vvvпоказывает:

debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 19: Applying options for *
debug1: /Users/.../.ssh/config line 37: Applying options for exact.hostname.domain.com

но я все равно в концеno such identity: .ssh/id_null: No such file or directory


правка 2: еще одна странность, которую я увидел наssh -vvv

он всегда пытается использовать все ключи, которые у меня есть. Поэтому я подумал, что у него может быть какое-то жестко закодированное значение по умолчанию для .ssh/id_rsa*, поэтому я переместил все свои приватные ключи в , чтобы .ssh/keys/скрыть его от этого значения по умолчанию, и обновил определенные Hostзаписи... оказалось, он пытается использовать ключи из всех записей хоста! даже тех, у которых нет совпадений!

Подводя итог, у меня есть по одному определенному совпадению хоста вверху и внизу файла (просто для надежности), затем хосты, которые не совпадут, и еще *один.

но ssh -vvv показывает:

debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/x/.ssh/keys/id_rsa_git (0x7f954b700530),
debug2: key: /Users/x/.ssh/keys/id_rsa (0x7f954b415700), explicit
debug2: key: /Users/x/.ssh/id_null (0x0), explicit

Почему, черт возьми, он добавляет данные .ssh/keys/id_rsa_git, если это IdentityFileединственное, о чем упоминается ниже Host github.com? И почему он в конечном итоге пытается отправить данные, id_nullдаже если они соответствуют явным, Host exact.hostname.domain.comкак указано в отладочном выводе debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com?


правка 3:

после того, как я переместил все свои ключи в .ssh/keys/*и указал там только ключи для каждого хоста в ssh_config, теперь я вижу при каждом sshсоздании экземпляра:

/Users/me/.ssh/id_*[^p][^u][^b]: No such file or directory

но даже после этого, этовсе ещезагружает IdentityFiles издругойhosts в ssh_config при подключении. Почему?!

решение1

man ssh-configговорит:

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

Поэтому убедитесь, что нужная вам конфигурация находится в первой совпавшей Hostзаписи, как показано в ssh -vv совпадающих строках: Applying options for.

В общем случае это означает, что Host *должно бытьпоследний.

Связанный контент