В настоящее время у меня есть это в моем файле .ssh / config:
Host *
AskPassGUI no
IdentityFile ~/.ssh/%r@%h
IdentityFile ~/.ssh/%h
IdentityFile ~/.ssh/id_dsa
Когда я подключаюсь по ssh к хосту, для которого у меня нет ключевого файла, логин работает, но я также получаю следующие ошибки:
no such identity: /Users/user/.ssh/user@example.com: No such file or directory
no such identity: /Users/user/.ssh/example.com: No such file or directory
В идеале я бы хотел, чтобы ssh проверял файлы, но не выдавал ошибку, если какой-либо из них не может быть найден. Идея состоит в том, чтобы иметь возможность помещать закрытые ключи с именами типа «user@example.com» или «example.com» в мой каталог .ssh и использовать ssh при входе в систему с этим комбинированным пользователем / хостом, но не жаловаться и затем войдите в систему, если файл отсутствует. Я не хочу использовать Host
директивы, как описано в этот ответ, потому что у меня много ключевых файлов, и я бы предпочел не добавлять их в папку, а затем редактировать файл конфигурации и добавлять директивы хоста для каждого из них.
Возможно ли такое?
После просмотра исходного кода openssh кажется, что ответ следующий:
OpenSSH считает строки IdentityFile в ~ / .ssh / config "предоставленными пользователем". Если пользовательский файл IdentityFile не может быть найден, он выводит предупреждение на консоль. См. Функцию load_identity_file в sshconnect2.c.
Так что, к сожалению, это невозможно сделать именно что я хочу, но существует пара обходных путей:
Можно было бы добавить строку LogLevel ERROR
в ваш файл ~ / .ssh / config. Это на один шаг ниже уровня журнала по умолчанию INFO
. Я не выбрал это, так как не был уверен, какие еще предупреждения он подавит.
Я выбрал вариант добавления следующих строк в мой файл / etc / ssh_config:
Host *
IdentityFile ~/.ssh/%r@%h
IdentityFile ~/.ssh/%h
# The lines below maintain ssh's default behavior:
IdentityFile ~/.ssh/identity
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_dsa
Затем я удалил IdentityFile
строки из моего файла ~ / .ssh / config.
Эти строки не считаются «предоставленными пользователем», если они находятся в / etc / ssh_config, поэтому ничего не регистрируется, когда файл не может быть найден.