Назад | Перейти на главную страницу

SSH Как игнорировать ошибки "Не найден файл IdentityFile"?

В настоящее время у меня есть это в моем файле .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, поэтому ничего не регистрируется, когда файл не может быть найден.