Как и большинство системных администраторов, я все время использую openssh. У меня около дюжины ключей ssh, мне нравится иметь разные ключи ssh для каждого хоста. Однако это вызывает проблему, когда я подключаюсь к хосту в первый раз, и все, что у меня есть, это пароль. Я хочу просто подключиться к хосту с помощью пароля, в данном случае без ключа ssh. Однако клиент ssh предложит все открытые ключи в моем ~/.ssh/
(Я знаю это, глядя на вывод ssh -v
). Поскольку у меня их так много, я буду отключаться из-за слишком большого количества сбоев аутентификации.
Есть ли способ сказать моему клиенту ssh не предлагать все ключи ssh?
Хотя другие намекали на это с помощью решений на основе конфигурации, вероятно, стоит отметить, что вы можете легко сделать это единовременно в командной строке с помощью:
ssh -o 'PubkeyAuthentication no' myhostname.mydomain
Это ожидаемое поведение согласно справочной странице ssh_config
:
IdentityFile
Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
tion identity is read. The default is ~/.ssh/identity for protocol
version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
protocol version 2. Additionally, any identities represented by the
authentication agent will be used for authentication.
[...]
It is possible to have multiple identity files specified in configu‐
ration files; all these identities will be tried in sequence. Mul‐
tiple IdentityFile directives will add to the list of identities
tried (this behaviour differs from that of other configuration
directives).
В основном, указав IdentityFile
s просто добавляет ключи в текущий список, который агент SSH уже представил клиенту.
Попробуйте переопределить это поведение с помощью этого в нижней части вашего .ssh/config
файл:
Host *
IdentitiesOnly yes
Вы также можете переопределить этот параметр на уровне хоста, например:
Host foo
User bar
IdentityFile /path/to/key
IdentitiesOnly yes
Следуя решению Джеймса Снирингера, вы можете просто установить ssh_config в следующих строках:
Host *.mycompany.com
IdentityFile .ssh/id_dsa_mycompany_main
Host *.mycustomer.com
IdentityFile .ssh/id_dsa_mycustomer
Host *
RSAAuthentication no #this should be up top, avoid ssh1 at all costs
PubkeyAuthentication no
Если вы подключаетесь с помощью определенного ключа ко многим машинам, не входящим в общий домен, рассмотрите возможность предоставления им всех CNAME в вашем собственном DNS. Я делаю это со всеми клиентскими системами.
Подобно решению user23413, вы можете полностью отключить аутентификацию с открытым ключом для определенного хоста (или шаблона подстановки):
Host *.example.org
RSAAuthentication no # SSHv1
PubkeyAuthentication no # SSHv2
Если вы укажете определенный файл ключа с помощью ssh -i / path / to / key, он будет использовать только этот файл, даже если в агент загружены другие, и вам не будет предложено ввести пароль. Вы также можете отредактировать ~ / .ssh / config и добавить что-то вроде этого ...
Хост foo.example.com
IdentityFile .ssh / id_rsa_foo.example.com
вы также можете сделать ...
Хост * .example.org
IdentityFile .ssh / id_rsa_example.org