3

У меня был ~/.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

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

Он работал отлично, даже руководство говорило, что более конкретные шаблоны хостов должны быть на вершине, так всегда работало нормально. Я всегда обращался к этим двум доменам, и правильные ключи идентификации были подобраны просто отлично. У меня никогда не было проблем, когда нулевой ключ пытался использовать эти два домена. И я использовал это годами. Всегда есть правильный пользователь и ключ. Я использовал один и тот же конфигурационный файл для 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 с других хостов в ssh_config при подключении. Зачем?!

1 ответ1

1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .