У меня был ~/.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 при подключении. Зачем?!