SSH + аутентификация по ключу = грабли
Постоянная ссылка: 2014-11-06 01:15:00+03:00
, автор Евгений Лопатин
в Блог
тэги: linux ssh public key rsa ssh agent
Столкнулся со странной проблемой - не могу зайти по RSA-ключу на сервер, явно указывая его в параметрах ssh
с -i <keyname>
.
При внимательном просмотре оказалось, что если используется ssh-agent, ssh-клиент по-умолчанию (по-крайней мере в Arch и Ubuntu) пытается
использовать все предлагаемые ssh-агентом ключи, а сервер после определенного числа попыток (задаётся MaxAuthTries
в конфигурации sshd
)
закрывает соединение.
Выглядело это примерно так, при комманде ssh -i MANUAL_KEY USER@X.X.X.X -vv
(фрагмент):
....................
debug2: key: KEY1 (0x7f0.........),
debug2: key: KEY2 (0x7f0.........),
debug2: key: KEY3 (0x7f0.........),
debug2: key: KEY4 (0x7f0.........),
debug2: key: KEY5 (0x7f0.........),
debug2: key: KEY6 (0x7f0.........),
debug2: key: **MANUAL_KEY** (0x7f0.........), explicit <--------------
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: KEY1
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: KEY2
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: KEY3
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: KEY3
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: KEY4
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: KEY5 <-------------
debug2: we sent a publickey packet, wait for reply
Received disconnect from X.X.X.X: 2: Too many authentication failures for USER
В итоге после 5 попыток, на ключе KEY5, сервер закрыл соединение, и до нашего ключа MANUAL_KEY дело не дошло.
Варианты решения:
- использовать в строке
-i <имя ключа> -o IdentitiesOnly=yes
, явно указывая, какой ключ использовать - прописать те же опции в
~.ssh/config
для нужного хоста - не использовать ssh-agent, либо следить за содержимым его кеша ключей, удаляя лишние
- еще какие-нибудь варианты, которые мне не пришли в голову - это ведь Linux, возможностей море....