ssh: Too many authentication failures
sshで接続しようとすると、Too many authentication failuresといわれて失敗する。 code:bash
$ ssh FOO-HOST
...
Received disconnect from FOO-HOST: 2: Too many authentication failures
Disconnected from FOO-HOST
分かっていること
公開鍵を登録順に接続先に投げて認証できるか試していってる 接続先が、公開鍵試行回数の上限を3つ等の低い(低すぎる)値にしている
とりあえずの対処方
ssh-add -D で鍵を消すと、試行回数が0になるので解決する
しかしssh接続時にパスフレーズを入力するとssh-addに覚えちゃうので(Macの場合?)、そのうちまた登録鍵数が溜まって失敗するようになる
ssh で -o IdentitiesOnly=yes オプションを指定して、明示的に指定した鍵だけを使うようにする
この場合、ssh-addした方の情報は使ってくれないので、毎回パスフレーズ入力が必要
疑問
今は IdentityFile を指定しても、ssh-add内にある公開鍵を全部チャレンジしているように見える
「この鍵(このfingerprintの鍵)を使う」と固定しつつ、ssh-add内のfingerprintで一致させて、その秘密鍵を使って認証することはできないの?
参考
Received disconnect from xxx.xxx.xxx.xxx: 2: Too many authentication failures for xxx 公開鍵認証以外の試行回数が制限値を超えた
ssh 接続時に -o IdentitiesOnly=yes を追加
~/.ssh/configに IdentitiesOnly yes を追加する対応でもOK
As you can see, it tries several times to connect and gets error, so you get disconnected when you reach the maximum allowed connection attempts of the server.
IdentitiesOnly (ファイルに格納された秘密鍵のみを使用)
認証の際に、たとえ認証エージェントssh-agent (1) またはPKCS11Providerが複数の秘密鍵を持っていた場合でも、ssh_config ファイルかssh (1) のコマンドラインから明示的に指定された秘密鍵および証明書のみを使用するよう指定します。この引数のとりうるキーワードは"yes"または"no"です。この項目を使うのは、ssh-agent が多くの異なる秘密鍵を返すような状況でしょう。デフォルトでは"no"になっています。
IdentityFile (identity ファイル)
ユーザの DSA, ECDSA, Ed25519 または RSA 認証用 identity (秘密鍵) を読むファイルを指定します。デフォルトは、プロトコル 1 の場合ユーザのホームディレクトリにある~/.ssh/identityファイルが、プロトコル 2 の場合は~/.ssh/id_dsa ,~/.ssh/id_ecdsa ,~/.ssh/id_ed25519および~/.ssh/id_rsaが使われます。IdentitiesOnlyが設定されていない場合は、これに加えて認証エージェントによって現れる identity も使われます。証明書がCertificateFileによって明示的に指定されていない場合、ssh (1) は、IdentityFileで指定されるパス名に-cert.pubを追加した名前のファイルから、証明書に関する情報を読み込もうとします。
CertificateFile (証明書ファイル)
ユーザの証明書を読み込むファイルを指定します。この証明書を使うには、これに対応する秘密鍵をIdentityFile設定項目か、PKCS11Providerまたはssh-agent (1) を経由したssh (1) の-i オプションで別に与える必要があります。
設定ファイルの中で複数の証明書ファイルを指定することもできます。その場合は、証明書が順に試されます。複数のCertificateFile設定項目は認証に使う証明書の一覧に追加します。