1

Мой файл конфигурации SSH настроен на использование определенного IdentityFile в разделе Host * в качестве ключа по умолчанию. Для одного конкретного хоста я хочу предложить другой ключ (и только этот ключ, а не ключ по умолчанию).

Мой файл ~/.ssh/config выглядит так:

Host specialhost
HostName specialhostname.mydomain.com
IdentityFile %d/.ssh/special-key
LogLevel debug
IdentitiesOnly yes 

Host *
IdentityFile %d/.ssh/regular-key
IdentitiesOnly yes 

Независимо от того, что я делаю, или независимо от порядка разделов в файле конфигурации, мой SSH-клиент (OS X OpenSSH_6.2p2) сначала предлагает «обычный ключ» (который принимает сервер, а это не то, что я хотел).

Страница man ssh_config сообщает следующее о IdentityFile:

Можно указать несколько файлов идентификации, указанных в файлах конфигурации; все эти идентичности будут опробованы последовательно.

"Последовательность", на которую он ссылается, мне неясна, так как IdentityFile, указанный в разделе Host * всегда предлагается первым, даже если перед ним указан "specialhost" (как в примере выше). Предлагаемый здесь трюк IdentitiesOnly похоже, относится только к ключам, предлагаемым ssh-agent. Несколько других подобных вопросов не дали никаких ответов.

Я хочу оставить обычный ключ в разделе Host * потому что я использую этот ключ с десятками других хостов и не хочу дублировать IdentityFile в каждой записи хоста.

Есть ли способ заставить SSH предлагать только «специальный ключ», используя только конфигурацию SSH (и не копируя мои директивы IdentityFile на каждый другой хост)? Я вижу, как этого добиться, вынув ключи из раздела Host * , добавив их к агенту, а затем используя IdentitiesOnly yes для specialhost, но я бы действительно предпочел избегать использования ssh-agent, если нет другого способа. ,

1 ответ1

5

Линия Host может иметь более одного шаблона. И это не прописано в документации, а "!«(восклицательный знак) в начале шаблона означает« если хост соответствует этому шаблону, то не применять раздел ». Другими словами, вы можете сделать это:

Host * !special1 !special2
IdentityFile etc...

И он должен соответствовать любому хосту, кроме "special1" и "special2".

Я не думаю, что порядок шаблонов важен. Проверяемое имя хоста должно соответствовать одному не восклицательному шаблону и не должно соответствовать никаким восклицательным шаблонам.

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