Постоянная ссылка: 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, возможностей море....