Я помещаю свои ssh-файлы в папку ~ / .ssh /. У меня там около 30 файлов.
Когда я подключаюсь к серверам, я указываю файл идентификации для использования с чем-то вроде
ssh -i ~ / .ssh / client1-identity client1@10.1.1.10
Однако, если я не укажу файл идентификации, а просто использую что-то вроде этого:
ssh user123@example.com
Я получаю ошибку
Слишком много ошибок аутентификации для пользователя123
Я понимаю, что это потому, что если файл идентификации не указан, и ssh может найти файлы идентификации, то он попробует их все.
Я также понимаю, что могу отредактировать ~/.ssh/config
файл и указать что-то вроде:
Хост example.com PreferredAuthentications клавиатура-интерактив, пароль
для того, чтобы это соединение не пробовало известные файлы идентификации.
Итак, я думаю, что я мог бы переместить мои файлы идентификации за пределы ~/.ssh/
каталога, или я мог бы указать каждый хост, для которого я хочу отключить аутентификацию файла идентификации, в файле конфигурации, но есть ли какой-нибудь способ сказать SSH покупать по умолчанию, а не искать идентификационные файлы? Или указать те, которые будут искать?
ssh -v
чтобы узнать наверняка.Ответы:
Вы можете использовать эту
IdentitiesOnly=yes
опцию вместе сIdentityFile
(см. Справочную страницу ssh_config ). Таким образом, вы можете указать, какие файлы он должен искать.В этом примере ssh будет проверять только те идентификационные данные, которые указаны в файлах ssh_config + 4, перечисленные в командной строке (идентификационные данные, предоставленные агентом, будут игнорироваться):
Формы
-i
и-o IdentityFile=
взаимозаменяемы.источник
IdentitiesOnly yes
(без "=")?Configuration options may be separated by whitespace or optional whitespace and exactly one '='; the latter format is useful to avoid the need to quote whitespace when specifying configuration options using the ssh, scp, and sftp -o option.
IdentitiesOnly
может не всегда работать, возможно, вам придется исключить хост специально; см superuser.com/questions/859661/...Краткий ответ user76528 правильный, но у меня возникла эта проблема, и я подумал, что некоторые детали будут полезны. Вы также можете позаботиться об этом решении, если спросите себя: «Почему ssh игнорирует мой параметр конфигурации identityfile»?
Во-первых, в отличие от любого другого параметра в ssh_config, ssh не использует первый
IdentityFile
найденный параметр. Вместо этогоIdentityFile
опция добавляет этот файл в список используемых идентификаторов. Вы можете сложить несколькоIdentityFile
вариантов, и клиент ssh будет пробовать их все, пока сервер не примет один или не отклонит соединение.Во-вторых, если вы используете ssh-agent, ssh автоматически попытается использовать ключи в агенте, даже если вы не указали их в параметре ssh_config IdentityFile (или -i). Это общая причина, по которой вы можете получить
Too many authentication failures for user
ошибку. ИспользованиеIdentitiesOnly yes
опции отключит это поведение.Если вы используете ssh как несколько пользователей для нескольких систем, я рекомендую поместить
IdentitiesOnly yes
в ваш глобальный раздел ssh_config и поместить каждый из нихIdentityFile
в соответствующие подразделы Host.источник
IdentitiesOnly yes
в глобальный раздел ssh_config - вот что сделало это для меня. Спасибо!Host * \ IdentityFile ~/.ssh/mykey
в качестве параметра конфигурации, и сначала казалось странным, что имелась другая запись для конкретного сайта, например,Host special \ IdentityFile ~/.ssh/specialkey \ IdentitiesOnly yes
продолжал предоставлятьmykey
вместоspecialkey
. Конечно, было непонятно, пока я не понял (из вашего ответа), что записи IdentityFile сложены в порядке оценки и будет использоваться последний определенный. УдалениеIdentityFile ~/.ssh/mykey
решило проблему, и был использован правильный единственный ключ.git pull/push
команды пробовали все идентификаторы, загруженные в мой агент. Это не было проблемой, пока в какой-то момент у меня не было слишком много ключей.Я вообще так делаю так:
Возможны следующие варианты:
-o IdentitiesOnly=yes
- говорит SSH использовать только те ключи, которые предоставлены через CLI, а не из$HOME/.ssh
или через ssh-agent-F /dev/null
- отключает использование$HOME/.ssh/config
-i ~/path/to/some_id_rsa
- ключ, который вы явно хотите использовать для подключенияпример
Обратите внимание на вышеприведенный вывод,
ssh
который идентифицировал толькоmy_id_rsa
закрытый ключ через CLI и что он использует его для подключения к какому-либо серверу.Конкретно эти разделы:
а также:
источник
-F /dev/null
это недостающий фрагмент в других ответах.В сценарии, где у вас много ключей, вы всегда будете сталкиваться с ошибкой «Too many Authentication Failures». Если у вас есть пароль, и вы хотите просто использовать пароль для входа в систему, вот как вы это делаете.
Чтобы использовать ТОЛЬКО аутентификацию по паролю и НЕ использовать открытый ключ, а НЕ использовать несколько вводящее в заблуждение «клавиатурно-интерактивный» (который является надмножеством, включающим пароль), вы можете сделать это из командной строки:
источник
Используйте IdentityFile, но продолжайте использовать ssh-agent, чтобы избежать повторений парольной фразы
Принятое решение использования
IdentitiesOnly yes
означает, что вы никогда не сможете воспользоваться ssh-agent, что приводит к повторным запросам вашей парольной фразы при загрузке вашего ключа.Чтобы продолжить использовать
ssh-agent
и избежать ошибок «Too many failures failures», попробуйте следующее:Удалите все сценарии запуска интерактивной консоли, в которые автоматически загружаются ключи
ssh-agent
.добавьте
AddKeysToAgent yes
в конфигурацию ssh вашего клиента. Это запросит у вас пароль при первом подключении, но затем добавьте ключ к вашему агенту.используйте,
ssh-add -D
когда вы получаете ошибки «слишком много аутентификации». Это просто «сбрасывает» (удаляет) ваш кэш ssh-agent. Затем повторите попытку подключения в том же сеансе. Вам будет предложено ввести пароль, и после его принятия он будет добавлен к вашему агенту. Поскольку у вас будет только один ключ в вашем агенте, вам будет разрешено подключаться. Тогда ssh-agent все еще будет доступен для будущих подключений во время того же сеанса, чтобы избежать повторных запросов.источник
Клиент ssh и the
ssh-agent
обмениваются данными через сокет домена Unix, имя которого задается клиентуSSH_AUTH_SOCK
переменной среды (устанавливается агентом при его запуске).Таким образом, для предотвращения запроса агента агентом от одного вызова эта переменная может быть явно установлена на что-то недопустимое, например, на пустую строку;
Подобный вызов клиента не сможет установить связь с агентом и сможет предложить серверу только идентификаторы, доступные в виде файлов
~/.ssh/
или любых указанных в командной строке с-i
помощью сервера.источник
У вас был ответ все время (почти):
Работал на меня.
источник
добавьте это в конец
~/.ssh/config
файла, чтобы не использовать ключи для неконфигурационных серверов:источник